對節點執行維護操作之前(例如:內核升級,硬件維護等),您可以使用 kubectl drain
安全驅逐節點上面所有的 pod。安全驅逐的方式將會允許 pod 里面的容器遵循指定的 PodDisruptionBudgets
執行優雅的中止。
注: 默認情況下,kubectl drain
會忽略那些不能殺死的系統類型的 pod,如果您想了解更多詳細的內容,請參考kubectl drain
kubectl drain
返回成功表明所有的 pod (除了前面排除的那些)已經被安全驅逐(遵循期望優雅的中止期,並且沒有違反任何應用程序級別的中斷預算)。然后,通過對物理機斷電或者在雲平台上刪除節點所在的虛擬機,都能安全的將節點移除。
首先,需要確定希望移除的節點的名稱。您可以通過下面命令列出集群里面所有的節點:
kubectl get nodes
接下來,告知 Kubernetes 移除節點:
kubectl drain <node name>
執行完成后,如果沒有任何錯誤返回,您可以關閉節點(如果是在雲平台上,可以刪除支持該節點的虛擬機)。如果在維護操作期間想要將節點留在集群,那么您需要運行下面命令:
kubectl uncordon <node name>
然后,它將告知 Kubernetes 允許調度新的 pod 到該節點。