管理k8s核心資源的三種基本方法:
一、陳述式-主要依賴命令行工具 --可以滿足90%以上的使用場景,但是缺點也很明顯:
命令冗長,復雜,難以記憶
特定場景下,無法實現管理需求
對資源的增、刪、查操作比較容易,改比較麻煩,需要patch來使用json串來更改。
1.1 查看名稱空間 查詢時,為了避免重名,需要指定名稱空間。
# kubectl get namespace
簡寫:
# kubectl get ns
1.2 查詢命名空間中的資源,使用-n 指定命名空間
# kubectl get all -n default
# kubectl get pods -n default
# kubectl get nodes -n default
1.3 創建命名空間
# kubectl create ns app
1.4 刪除命名空間
# kubectl delete ns app
1.5 創建一個deployment類型的pod控制器:PS:1.16版本以后,控制器有變化,具體變化參考k8s官網。
pod控制器類型參考:https://www.cnblogs.com/weiyiming007/p/10246118.html
# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public
# kubectl get deploy -n kube-public
1.6 查看pod控制器或者pod概覽信息 : -o wide
# kubectl get deploy -o wide -n kube-public
# kubectl get pod -o wide -n kube-public
1.7 查看pod控制器、pod、service等資源的詳細信息:describe
# kubectl describe deploy nginx-dp -n kube-public
# kubectl describe pod nginx-dp-5dfc689474-4bhfh -n kube-public
# kubectl describe svc nginx-dp -n kube-public
詳細信息太多,就不截圖了。
1.8 進入pod容器,用法和docker exec一致,但是需要使用-n 指定命名空間
# kubectl exec -ti nginx-dp-5dfc689474-4bhfh /bin/bash -n kube-public
1.9 刪除pod容器,此刪除,只是刪除了pod容器,並沒有刪除pod控制器,所以此操作相當於刪除pod后,pod控制器在拉起一個新的pod。
# kubectl delete pods nginx-dp-5dfc689474-4bhfh -n kube-public
可以看到我們刪除pod以后,pod控制器又幫我們從新拉起了一個新的pod,想要完全刪除,需要刪除pod控制器。
1.10 刪除pod控制器
# kubectl delete deploy nginx-dp -n kube-public
可以看到,當我們刪除了pod控制器以后,pod容器也隨之被刪除了。
1.11 擴容pod --replicas=數量
# kubectl scale deployment nginx-dp --replicas=2 -n kube-public
1.12 管理service資源 service資源:為pod資源提供穩定的接入點
# kubectl create deploy nginx-dp --image=harbor.od.com/public/nginx:v1.7.9
# kubectl expose deploy nginx-dp --port=80 -n kube-public
看到我們已經創建了一個service資源,可以通過192.168.234.234的80,訪問到后面pod,為了解決pod漂移導致IP變化的問題。
可以使用ipvsadm -Ln來查看:nq為ipvs調度算法中的一種,其他調度算法請自行查閱。
我們通過刪除pod的方式,讓pod漂移到另一台node節點,再來查看一下:
可以看到,雖然pod漂移了,但是service資源提供的接入點是不變的,這得益於ipvs的強大。
1.13 查看資源配置清單詳細信息:-o yaml
# kubectl get pod nginx-dp-5dfc689474-c5r9r -o yaml -n kube-public
# kubectl get deploy nginx-dp -o yaml -n kube-public
# kubectl get svc -o yaml -n kube-public
1.14 查看屬性的定義及用法:例:查看service資源下metadata的定義及用法
# kubectl explain service.metadata
2、聲明式-依賴統一資源配置清單(manifest) yaml/json
2.1 創建一個svc資源配置清單
# vi nginx-ds-svc.yaml
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 sessionAffinity: None type: ClusterIP
# kubectl create -f nginx-ds-svc.yaml
# kubectl get svc nginx-ds -o yaml -n default
2.2 離線修改資源配置清單:
修改資源配置清單后可以使用apply應用。
這里增加一個知識點,就是kube-apiserver這個服務當中,有一個限制端口范圍的參數:--service-node-port-range 10-29999,這個參數在使用apply修改資源配置清單的時候,會有作用
如果修改后的資源配置清單中的port不在這個范圍,會報錯,修改這個以后,重啟kube-apiserver即可。
# vi nginx-ds-svc.yaml #將對外暴露的端口改為881
# kubectl apply -f nginx-ds-svc.yaml
可以看到端口從80變成了881
修改資源配置清單分為在線修改和離線修改(推薦離線修改):
2.3 在線修改:我這里使用在線修改,將端口修改為888
# kubectl edit svc nginx-ds -n default
2.4 刪除資源:
2.4.1 陳述式:
# kubectl delete svc nginx-ds -n default
2.4.2 聲明式:
# kubectl delete -f nginx-ds-svc.yaml
3、GUI式-主要依賴圖形化操作界面(web界面)