系列文章說明
本系列文章,可以基本算是 老男孩2019年王碩的K8S周末班課程 筆記,根據視頻來看本筆記最好,否則有些地方會看不明白
需要視頻可以聯系我
管理k8s核心資源的三種基本方法:
1 方法分類
- 陳述式--主要依賴命令行工具
kubectl進行管理- 優點
可以滿足90%以上的使用場景
對資源的增、刪、查操作比較容易 - 缺點
命令冗長,復雜,難以記憶
特定場景下,無法實現管理需求
對資源的修改麻煩,需要patch來使用json串更改。
- 優點
- 聲明式-主要依賴統一資源配置清單進行管理
- GUI式-主要依賴圖形化操作界面進行管理
2 kubectl命令行工具
2.0 增加kubectl自動補全
二進制安裝的k8s,kubectl工具沒有自動補全功能(其他方式安裝的未驗證),可以使用以下方式開啟命令自動補全
source <(kubectl completion bash)
2.1 get 查
2.1.1 查看名稱空間namespace
~]# kubectl get namespaces
NAME STATUS AGE
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
# namespaces可以簡寫為ns
kubectl get ns
# 但不是所有資源都可以簡寫,所以我還是習慣tab補全名
2.1.2 查看namespace中的資源
get all查詢所有資源
kubectl get all
# 默認是查詢default名稱空間的資源,查詢其他名稱空間,需要加 -n namespaces
kubectl get all -n kube-public

一般要養成習慣,
get任何資源的時候,都要加上-n參數指定名稱空間
get pods查詢所有pod
podsecuritypolicies.extensions
~]# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-ds-p66qh 1/1 Running 0 2d10h
get nodes查詢所有node節點
~]# kubectl get nodes -n default
NAME STATUS ROLES AGE VERSION
hdss7-21.host.com Ready master,node 2d12h v1.15.5
hdss7-22.host.com NotReady <none> 2d12h v1.15.5
2.1.3 -o yaml查看資源配置清單詳細信息
-o yaml 可以查看yaml格式的資源配置清單詳情
# 查看POD的清單
~]# kubectl -n kube-public get pod nginx-dp-568f8dc55-jk6nb -o yaml
# 查看deploy的清單
~]# kubectl -n kube-public get deploy nginx-dp -o yaml
# 查看service的清單
~]# kubectl -n kube-public get service -o yaml -n kube-public
2.2 創建刪除名稱空間
create namespace創建名稱空間
~]# kubectl create namespace app
namespace/app created
~]# kubectl get namespaces
NAME STATUS AGE
app Active 16s
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
delete namespaces刪除名稱空間
~]# kubectl delete namespaces app
namespace "app" deleted
~]# kubectl get namespaces
NAME STATUS AGE
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
2.3 管理POD控制器和POD
以deployment類型的POD控制為例,關於POD控制器類型,請參考官網
創建POD控制器
kubectl create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9 -n kube-public
~]# kubectl get deployments -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 18s
~]# kubectl get pod -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-568f8dc55-9qt4j 1/1 Running 0 7m50s
-o wide查看擴展信息
# 查看POD控制器信息,比基礎信息多出了鏡像來源,選擇器等
kubectl get deployments -o wide -n kube-public
# 查看POD信息,比基礎信息多出了POD的IP地址,節點位置等,
kubectl get pod -o wide -n kube-public

describe查看資源詳細信息
# 查看POD控制器詳細信息
kubectl describe deployments nginx-dp -n kube-public
# 查看POD詳細信息
kubectl describe pod nginx-dp-568f8dc55-9qt4j -n kube-public
exec進入某個POD
kubectl -n kube-public exec -it nginx-dp-568f8dc55-9qt4j bash
用法與docker exec類似
scale 擴容POD
kubectl -n kube-public scale deployments nginx-dp --replicas=2
delete刪除POD和POD控制器
~]# kubectl -n kube-public delete pods nginx-dp-568f8dc55-9qt4j
pod "nginx-dp-568f8dc55-9qt4j" deleted
~]# kubectl -n kube-public get pods
NAME READY STATUS RESTARTS AGE
nginx-dp-568f8dc55-hnrxr 1/1 Running 0 13s
~]# kubectl -n kube-public delete deployments nginx-dp
deployment.extensions "nginx-dp" deleted
~]# kubectl -n kube-public get pods
No resources found.
在POD控制器存在的情況下,刪除了POD,會由POD控制器再創建出新的POD
刪除POD控制器后,對應的POD也會一並刪除
2.4 service資源管理
從上面的POD刪除重建的過程可知,雖然POD會被POD控制器拉起,但是存放的NODE或POD的IP都是不確定的,那怎么對外穩定的提供服務呢
這就需要引入service的功能了,它相當於一個反向代理,不管后端POD怎么變化,server提供的服務都不會變化,可以為pod資源提供穩定的接入點
2.4.1 創建service資源
~]# kubectl -n kube-public create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9
deployment.apps/nginx-dp created
~]# kubectl -n kube-public expose deployment nginx-dp --port=80
service/nginx-dp exposed
~]# kubectl -n kube-public get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.94.73 <none> 80/TCP 45s
可以看到創建了一個VIP192.168.94.73,查看LVS信息,可以看到轉發條目
[root@hdss7-21 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
......
TCP 192.168.94.73:80 nq
-> 172.7.21.3:80 Masq 1 0 0
2.4.2 擴容POD看service怎么調度
~]# kubectl -n kube-public scale deployment nginx-dp --replicas=2
deployment.extensions/nginx-dp scaled
~]# ipvsadm -Ln
......
TCP 192.168.94.73:80 nq
-> 172.7.21.3:80 Masq 1 0 0
-> 172.7.22.4:80 Masq 1 0 0
2.5 explain查看屬性的定義和用法
查看service資源下metadata的定義及用法
kubectl explain service.metadata

3 統一資源配置清單
統一資源配置清單,就是一個yaml格式的文件,文件中按指定格式定義了所需內容,然后通過命令行工具kubectl應用即可
3.1 語法格式
kubectl create/apply/delete -f /path_to/xxx.yaml
3.1.1 學習方法
- 忌一來就無中生有自己寫,容易把自己憋死
- 先看官方或別人寫的,能讀懂即可
- 別人的讀懂了能改改內容即可
- 遇到不懂的用
kubectl explain查幫助
3.2 初略用法
3.2.1 查看已有資源的資源配置清單
kubuctl get svc nginx-dp -o yaml -n kube-pubic

必須存在的四個部分為:
apiVersion
kind
metadata
spec
資源配置清單中有許多項目,如果想查看資源配置清單中某一項的意義或該項下面可以配置的內容,可以使用explain來獲取
kubectl explain service.kind
3.2.2 創建並應用資源配置清單
創建yaml配置文件
cat >nginx-ds-svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP
EOF
應用配置創建資源
kubectl create -f nginx-ds-svc.yaml
# 或
kubectl apply -f nginx-ds-svc.yaml
# 查看結果
[root@hdss7-21 ~]# kubectl get -f nginx-ds-svc.yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.48.225 <none> 80/TCP 24s
create和apply的區別
create命令和apply命令都會根據配置文件創建資源,但是:
-
create命令只會新建,如果資源文件已使用過,則會提示錯誤
-
如果資源不存在,apply命令會新建,如果已存在,則會根據配置修改
-
如果是create命令新建的資源,使用apply修改時會提示
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply意思是如果要用apply修改,就應該用apply命令創建,或者create創建時加
--save-config參數 -
所以養成使用apply命令的習慣即可
3.2.3 修改資源配置清單
在線修改
使用edit命令,會打開一個在線的yaml格式文檔,直接修改該文檔后,修改立即生效
kubectl edit svc nginx-ds -n default
# 查看結果
[root@hdss7-21 ~]# kubectl get service nginx-ds
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.48.225 <none> 8080/TCP 2m37s
離線修改
離線修改就是修改原來的yaml文件,然后使用apply命令重新應用配置即可
#將對外暴露的端口改為881
sed -i 's#port: 80#port: 881#g' nginx-ds-svc.yaml
# edit修改過資源,再用apply修改,會報錯
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml
The Service "nginx-ds" is invalid:
* spec.ports[0].name: Required value
* spec.ports[1].name: Required value
# 加上--force強制修改選項
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml --force
service/nginx-ds configured
# 查看結果
[root@hdss7-21 ~]# kubectl get service nginx-ds
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.142.98 <none> 881/TCP 8s
3.2.4 刪除資源配置清單
陳述式刪除
即:直接刪除創建好的資源
kubectl delete svc nginx-ds -n default
聲明式刪除
即:通過制定配置文件的方式,刪除用該配置文件創建出的資源
kubectl delete -f nginx-ds-svc.yaml
