Kubernetes命令(持續更新)
阿新 • • 發佈:2019-12-31
taint
-
kubectl taint nodes node1 foo=bar:NoSchedule
-- 某個節點被加上了一個 Taint,即被“打上了汙點”,那麼所有 Pod 就都不能在這個節點上執行,除非,有個別的 Pod 宣告自己能“容忍”這個“汙點”,即宣告瞭 Toleration,它才可以在這個節點上執行。該 node1 節點上就會增加一個鍵值對格式的 Taint,即:foo=bar:NoSchedule。其中值裡面的 NoSchedule,意味著這個 Taint 只會在排程新 Pod 時產生作用,而不會影響已經在 node1 上執行的 Pod,哪怕它們沒有 Toleration。 -
kubectl taint nodes --all node-role.kubernetes.io/master-
-- 刪除這個 Taint,在“node-role.kubernetes.io/master”這個鍵後面加上了一個短橫線“-”,這個格式就意味著移除所有以“node-role.kubernetes.io/master”為鍵的 Taint
apiVersion: v1
kind: Pod
...
spec:
tolerations:
- key: "foo"
operator: "Exists"
effect: "NoSchedule"
複製程式碼
exec
-
kubectl exec -it test-projected-volume -- /bin/sh
-- 進入容器
node
-
kubectl get nodes
-- 檢視節點狀態 -
kubectl describe node master
-- 檢視這個節點(Node)物件的詳細資訊、狀態和事件(Event)
pod
-
kubectl create -f xxx.yaml
-- 建立pod -
kubectl replace -f xxx.yaml
-- 修改pod -
kubectl apply -f xxx.yaml
-- 應用修改或建立 -
kubectl get pods -l app=nginx
-
kubectl exec -it nginx-deployment-5c678cfb6d-lg9lw -- /bin/bash
-- 進入pod -
kubectl delete -f nginx-deployment.yaml
--刪除 -
kubectl attach -it nginx -c shell
-- 連線進容器 -
kubectl get pod testpodname -o yaml
-- 這樣的引數,會將指定的 Pod API 物件以 YAML 的方式展示出來。 -
kubectl get pods -w -l app=nginx
-- -w 引數,即:Watch 功能,實時檢視建立例項的過程
- 生命週期
- Pending。這個狀態意味著,Pod 的 YAML 檔案已經提交給了 Kubernetes,API 物件已經被建立並儲存在 Etcd 當中。但是,這個 Pod 裡有些容器因為某種原因而不能被順利建立。比如,排程不成功。
- Running。這個狀態下,Pod 已經排程成功,跟一個具體的節點繫結。它包含的容器都已經建立成功,並且至少有一個正在執行中。
- Succeeded。這個狀態意味著,Pod 裡的所有容器都正常執行完畢,並且已經退出了。這種情況在執行一次性任務時最為常見。
- Failed。這個狀態下,Pod 裡至少有一個容器以不正常的狀態(非 0 的返回碼)退出。這個狀態的出現,意味著你得想辦法 Debug 這個容器的應用,比如檢視 Pod 的 Events 和日誌。
- Unknown。這是一個異常狀態,意味著 Pod 的狀態不能持續地被 kubelet 彙報給 kube-apiserver,這很有可能是主從節點(Master 和 Kubelet)間的通訊出現了問題。
secrets
- kubectl get secrets -- 獲取到secrets
scale -- 水平擴充套件與收縮
-
kubectl scale deployment nginx-deployment --replicas=4
-- 將nginx-deployment的 ReplicaSet 的個數改為4 -
kubectl rollout status deployment/nginx-deployment
-- 實時檢視 Deployment 物件的狀態變化
edit -- 滾動更新
-
kubectl edit deployment/nginx-deployment
-- kubectl edit 指令,會幫你直接開啟 nginx-deployment 的 API 物件。然後,你就可以修改這裡的 Pod 模板 - 修改了 Deployment 裡的 Pod 定義之後,Deployment Controller 會使用這個修改後的 Pod 模板,建立一個新的 ReplicaSet,這個新的 ReplicSet 的初始 Pod 副本數是:0。
-
kubectl set image deployment/nginx-deployment nginx=nginx:1.91
-- 滾動升級映象 -
kubectl rollout undo deployment/nginx-deployment
-- 因為映象不存在等原因,“滾動更新”被觸發後,會立刻報錯並停止。這時候使用 roollout undo及能把整個 Deployment 回滾到上一個版本 -
kubectl rollout history deployment/nginx-deployment
檢視每次 Deployment 變更對應的版本 -
kubectl rollout undo deployment/nginx-deployment --to-revision=2
在 kubectl rollout undo 命令列最後,加上要回滾到的指定版本的版本號,回滾到指定版本。 -
kubectl rollout pause deployment/nginx-deployment
-- 讓這個 Deployment 進入了一個“暫停”狀態,接下來,你就可以隨意使用 kubectl edit 或者 kubectl set image 指令,修改這個 Deployment 的內容,我們對 Deployment 的所有修改,都不會觸發新的“滾動更新”,也不會建立新的 ReplicaSet。 -
kubectl rollout resume deploy/nginx-deployment
-- 對 Deployment 修改操作都完成之後,只需要再執行一條 kubectl rollout resume 指令,就可以把這個 Deployment“恢復”回來,在 kubectl rollout pause 指令之後的這段時間裡,我們對 Deployment 進行的所有修改,最後只會觸發一次“滾動更新”。
- 每執行一次擴充套件升級操作都會產生一個RS,即使我們用pause和resume控制了 ReplicaSet 的生成數量,隨著應用版本的不斷增加,Kubernetes 中還是會為同一個 Deployment 儲存很多不同的 ReplicaSet。那麼,我們又該如何控制這些“歷史”ReplicaSet 的數量呢?很簡單,Deployment 物件有一個欄位,叫作 spec.revisionHistoryLimit,就是 Kubernetes 為 Deployment 保留的“歷史版本”個數。所以,如果把它設定為 0,你就再也不能做回滾操作了。