目錄
陳述式資源管理方法:
- kubernetes集群管理集群資源的唯一入口是通過相應的方法調用apiserver的接口
- kubectl是官方的CLI命令行工具,用於與apiserver進行通信,將用戶在命令行輸入的命令,組織並轉化為apiserver能識別的信息,進而實現管理k8s各種資源的一種有效途徑
- kubectl的命令大全:kubectl --help
- k8s中文文檔:http://docs.kubernetes.org.cn/683.html
- 對資源的增、刪、查操作比較方便,但對改的操作就不容易了
#1.查看版本信息 kubectl version #2.查看資源對象簡寫 kubectl api-resources #3.查看集群信息 kubectl cluster-info #4.配置kubectl自動補全 source <(kubectl completion bash) #5.node節點查看日志 journalctl -u kubelet -f
1.1
kubectl get <resource> [-o wide | json | yaml] [-n namespace]
獲取資源的相關信息,-n指定命令空間,-o指定輸出格式
resource可以是具體資源名稱,如pod nginx -xxx;也可以是資源類型,如pod; 或者all (僅展示幾種核心資源,並不完整)
--all-namespaces 或-A :表示顯示所有命令空間,
--show-labels :顯示所有標簽
-l app:僅顯示標簽為app的資源
-l app=nginx :僅顯示包含app標簽, 且值為nginx的資源
1.2 查看master節點狀態
kubectl get componentstatuses
kubectl get cs
1.3 查看命名空間
kubectl get name space kubectl get ns #命令空間的作用:用於允許不同 命令空間的相同類型的資源重名
1.4 查看default 命名空間的所有資源
kubectl get all [-n default]
1.5 創建命名空間app
kubectl create ns gxd
kubectl get ns
1.6 刪除命名空間app
kubectl delete namespace gxd
kubectl get ns
1.7 在命名空間kube-public創建副本控制器(deployment) 來啟動Pod (nginx-test)
kubectl create deployment nginx-test --image=nginx -n kube-public
1.8 描述某個資源的詳細信息
kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test-65c98cd596-jct2g -n kube-public
1.9 查看命名空間kube-public 中的pod信息
kubectl get pods -n kube-public
1.10 kubectl exec可以跨主機登錄容器,docker exec只能在容器所在主機上登錄
kubectl exec -it nginx-test-65c98cd596-jct2g bash -n kube-public
1.11 刪除(重啟) pod資源,由於存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來
kubectl delete pod nginx-test-65c98cd596-jct2g -n kube-public
1.12 若pod無法刪除,總是處於terminate狀態, 則要強行刪除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0 #grace-period表示過渡存活期,默認30s,在刪除pod之前允許POD慢慢終止其上的容器進程,從而優雅退出,0表示立即終u止pod
1.13 擴容
kubectl scale deployment nginx-test --replicas=3 -n kube-public
kubectl scale deployment nginx-test --replicas=1 -n kube-public
1.14 刪除副本控制器
kubectl delete deployment nginx-test -n kube-public #或者 kubectl delete deployment/nginx-test -n kube-public
創建並運行一個或多個容器鏡像
創建一個deployment或job來管理容器
kubectl run --help #啟動nginx 實例,暴露容器端口80,設置副本數3 kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3 kubectl get pods kubectl get all
#1.將資源暴露為新的Service kubectl expose --help #2.為deployment的nginx創建service,並通過Service的80端口轉發至容器的80端口上,Service的名稱為nginx-service,類型為NodePort kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort ========================================================== Kubernetes之所以需要Service, 一方面是因為Pod的IP 不是固定的(Pod可能會重建),另一-方面則是因為- -組Pod 實例之間總會有負載均衡的需求。 Service通過label Selector實現的對一組的Pod的訪問。 對於容器應用而言,Kubernetes 提供了基於VIP (虛擬IP)的網橋的方式訪問 Service, 再由Service 重定向到相應的Pod。 service的類型: ●ClusterIP:提供一個集群內部的虛擬IP以供Pod訪問( service默認類型) ●NodePort:在每個Node.上打開一個端口以供外部訪問,Kubernetes將會在每個Node.上打開一個端口並且每個Node的端口都是一樣的,通過 NodeIp:NodePort的方式Kubernetes集群外部的程序可以訪問Service。 注:每個端口只能是一種服務,端口范圍只能是30000-32767 ●LoadBalancer:通過外部的負載均衡器來訪問,通常在雲平台部署LoadBalancer還需要額外的費用。 ========================================================== #3.查看pod網絡狀態詳細信息和Service暴露的端口 kubectl get pods,svc -o wide #4.查看關聯后端的節點 kubectl get endpoints #5.查看service的描述信息 kubect1 describe svc nginx #6.分半在node01和node02節點上操作,查看負載均衡端口 yum install ipvsadm -y ipvsadm -Ln #7.在master01主節點分別在3個pod內寫入網頁文件 kubectl exec -it nginx-65fc77987d-bfckn bash echo '111111' > /usr/share/nginx/html/index.html kubectl exec -it nginx-65fc77987d-n6rzk bash echo '222222' > /usr/share/nginx/html/index.html kubectl exec -it nginx-65fc77987d-pgpfh bash echo '333333' > /usr/share/nginx/html/index.html #8.瀏覽器訪問clusterip和nodeport curl 10.100.72.167:8000 curl 192.168.80.11:31430 curl 192.168.80.12:31430 curl 192.168.80.13:31430 #9.在master01操作 查看訪問日志 kubectl logs nginx-65fc77987d-bfckn kubectl logs nginx-65fc77987d-n6rzk kubectl logs nginx-65fc77987d-pgpfh
2.3.1 更改現有應用資源一些信息
kubectl set --help #//獲取修改模板 kubectl set image --help Examp1es: # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'. kubectl set image deploynent/nginx busybox=busybox nginx=nginx:1.9.1
2.3.2 查看當前nginx 的版本號
curl -I http://192.168.200.10:32742 curl -I http://192.168.200.11:32742 curl -I http://192.168.200.12:32742
2.3.3 將nginx版本更新為1.15版本
kubectl set image deployment/nginx nginx=nginx:1.15
2.3.4 處於動態監聽pod狀態,由於使用的是滾動更新方式,所以會先生成一個新的pod,然后刪除一個舊的pod,往后依次類推
kubectl get pods -w
2.3.5 再看更新好后的pod的ip會改變
kubectl get pods -o wide
2.3.6 再看nginx 的版本號
curl -I http://192.168.200.10:32742 curl -I http://192.168.200.11:32742 curl -I http://192.168.200.12:32742
2.4.1 對資源進行回滾管理
kubect1 rollout --help
2.4.2 查看歷史版本
kubectl rollout history deployment/nginx
2.4.3 執行回滾到上一個版本
kubectl rollout undo deployment/nginx
2.4.4 執行回滾到指定版本
kubectl rollout undo deployment/nginx --to-revision=3
2.4.5 檢查回滾狀態
kubectl rollout status deployment/nginx
2.5.1 刪除副本控制器
kubectl delete deployment.apps/nginx
2.5.2 刪除service
kubectl delete service/nginx-service
kubectl get all
Deployment控制器支持自定義控制更新過程中的滾動節奏,如“暫停(pause)”或“繼續(resume)”更新操作。比如等待第一批新的Pod資源創
建完成后立即暫停更新過程,此時,僅存在一部分新版本的應用,主體部分還是舊的版本。然后,再篩選一小部分的用戶請求路由到新版本的Pod應用,繼續觀察能否穩定地按期望的方式運行。確定沒問題之后再繼續完成余下的Pod資源滾動更新,否則立即回滾更新操作。這就是所謂的金絲雀發布。
3.1 更新deployment 的版本,並配置暫停deployment
kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3 kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort #先創建資源並創建3個副本 kubectl set image deployment nginx nginx=nginx:1.16 && kubectl rollout pause deployment nginx #更新並暫停 kubectl rollout status deployment nginx #觀察更新狀態
3.2 監控更新的過程,可以看到已經新增了一個資源,但是並未按照預期的狀態去刪除一個舊的資源,就是因為使用了pause暫停命令
kubectl get pods,svc -o wide kubectl get pods -w curl [-I] 10.100.129.74:8000 curl [-I] 192.168.200.11:31269
3.3 確保更新的pod沒問題了,繼續更新
kubectl rollout resume deployment nginx
3.4 查看最后的更新情況
kubectl get pods -w curl [-I] 10.100.129.74:8000 curl [-I] 192.168.200.11:31269
- 適合於對資源的修改操作
- 聲明式資源管理方法依賴於資源配置清單文件對資源進行管理 資源配置清單文件有兩種格式: yaml (人性化,易讀),json (易於api接口解析)
- 對資源的管理,是通過事先定義在統–資源配置清單內,再通過陳述式命令應用到k8s集群里
- 語法格式: kubectl create/app1y/delete -f xxxx.yaml
kubectl get deployment nginx -o yaml
kubectl explain deployment.status #資源清單里的字段 kubectl get service nginx-service -o yaml kubectl explain service.metadata
方法一:離線修改
修改yaml文件,並用kubectl apply -f xxxx.yaml文件使之生效
注意:當apply不生效時,先使用delete清除資源,再apply創建資源
kubectl get service nginx-service -o yaml > nginx-svc.yaml vim nginx-svc.yaml #修改port: 8080 kubectl delete -f nginx-svc.yaml kubectl apply -f nginx-svc.yaml kubectl get svc
方法二:在線修改
直接使用kubectl edit service nginx-service
在線編輯資源配置清單並保存退出即時生效(如port:8888)
PS:此修改方式不會對yaml文件內容修改
陳述式刪除
kubectl delete service nginx-service
聲明式刪除
kubectl delete -f nginx-svc.yaml