一、node節點維護流程
- 對k8s集群資源進行梳理,先確認集群資源是否允許進行該操作
- 若集群資源不足,可加入新的node節點之后再進行維護操作
- 確認無資源問題后進行pod驅逐:kubelet drain <node_name>(
- 檢查對應節點狀態是否處於SchedulingDisabled
- 檢查node上是否無pod運行,切被驅逐的pod已經在其他節點運行正常
- 確認狀態為SchedulingDisabled,且pod已經在其他節點運行正常后執行后續操作
- 關閉集群相關服務及docker服務
- 關機維護
- 開機啟動相關服務(注意啟動順序)
- 解除node節點不可調度:kubectl uncordon node
- 創建測試pod,並使用節點標簽測試節點可以被正常調度
二、kubernetes處理node的命令詳解(cordon、drain、delete node區別)
- 主要目的:導致node處於不可調度狀態,新創建的pod容器不會調度在node上。
- cordon:將node置為SchedulingDisabled不可調度狀態,后續的新創建pod容器時scheduler調度不會考慮該node舊的pod容器不會正常受影響,仍可以對外提供正常服務。(特殊情況:pod容器如果跟node綁定的話,容器下次更新就不會回到原宿主機,該情況如何處理呢?可能設置成不可調度狀態就不太合適。調度器 預調度策略)
恢復調度 kubectl uncordon node - drain 驅逐節點:設置該node為不可調度狀態 cordon,驅逐node節點上pod,使其在其他節點上創建。gracefully terminate all pods
恢復調度 kubectl uncordon node - delete 節點:delete node后 kubernetes集群管控端獲取不到node信息。master節點刪除該node,失去對其控制,master不可對其恢復驅逐node上的pod容器。(如何驅趕呢?參考 https://blog.csdn.net/li_101357/article/details/89606269 ,主要是podGCcontroller來做這件事情) 疑問是:master刪除node了,GC怎么刪除呢?強制刪除
恢復調度,需要進入node節點,重新加入集群