K8S 節點維護
最近公司服務器到期,需要調整配置,但是配置調整的話,節點必須要重啓的。其他情況下, 比如節點進行打補丁、操作系統升級等操作時,需停機維護,這就涉及 pod 驅逐遷移。今天說一下調整的過程,以及調整過程中碰到的問題。
節點維護
-
設置節點不可調度
設置 xuh04 不可調度,查看各節點狀態,xuh04 爲 SchedulingDisabled,此時 master 不會將新的 pod 調度到該節點上,但是該節點上的 pod 還是正常運行。
-
驅逐節點上的 pod
kubectl drain xuh04 --delete-emptydir-data --ignore-daemonsets --force
kubectl drain 命令參數說明
-
–delete-emptydir-data 即使 pod 使用了 emptyDir 也刪除
-
–ignore-daemonsets 忽略 deamonset 控制器的 pod,如果不忽略,deamonset 控制器控制的 pod 被刪除後可能馬上又在此節點上啓動起來, 會成爲死循環;
-
--force 不加 force 參數只會刪除該 NODE 上由 ReplicationController, ReplicaSet, DaemonSet,StatefulSet 或者 Job 創建的 Pod,加了後還會刪除’裸奔的 pod’(沒有綁定到任何 replication controller)
-
維護結束
# kubectl uncordon xuh04 node/xuh04 uncordoned # kubectl delete node xuh04
避坑
-
沒有驅逐節點上的 pod,不要直接重啓,直接重啓的話,會造成 pod 狀態丟失
導致 pod 不能調度到其他節點,如果不是多副本的話,服務會直接掛掉。直到節點恢復正常。
-
爲了確保 drain 驅逐 pod 的時候,容器應用服務不中斷,必須滿足:
-
要驅逐的 pod 副本數量必須大於 1
-
要配置 "反親和策略",確保被驅逐的 pod 被調度到不同的 Node 節點上
-
deployment 採用滾動更新,設置 maxUnavailable 爲 0,maxSurge 爲 1
-
使用 PodDisruptionBudget (PDB) 保護應用程序
由於時間問題,沒有嘗試,查了下解決方案
https://kuboard.cn/learning/k8s-intermediate/workload/disruption-exam
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/hBjOvag3kfGqe6FnL2UnYA