一、什麼是Kubernetes Cordon
Kubernetes Cordon 是 Kubernetes 節點管理中的一個命令,用於將一個節點標記為不可調度。使用該命令標記節點後,該節點上原有的pod不會刪除,但是kube-scheduler將不會在該節點上新建pod。
二、Cordon的作用
1、避免節點被污染。 有時,在處理節點故障之前,您可能需要讓kubernetes知道通知您節點故障的詳細信息,以便您可以確定是否要修復該節點,還是直接刪除它,並在縮小或擴展群集方案時保留該節點。k8s的Cordon命令可以允許您防止新的調度Pod運行在指定的節點上,從而避免節點被污染。
2、避免過載。 可以將Cordon命令用於您要關閉或徹底刪除的節點。在指定時間範圍內,您可以防止調度超出需要繁重資源的Pod,從而避免過載該節點。
3、方便維護。 您可以通過運行Cordon命令來停止可以在特定節點上運行的Pod,然後您可以完成此節點上的必要維護工作,無需擔心將新的Pod調度在已停用的節點上。
三、使用場景
1、維護升級
對於長時間運行的集群環境,節點需要進行定期維護,例如,內核或系統更新、軟件更新。
在升級之前,為了避免pod被強制調度到要維護的節點,可以使用Cordon命令將該節點標記為不可調度。這樣kube-scheduler將不會在該節點上新建pod。並且kubelet不會自動將即將維護的節點上的Pod重啟到集群中的其他節點。
當維護工作完成後,使用Kubernetes的Drain命令,可以安全地刪除該節點上的Pod,以便在正常的維護周期後重新加入集群。
2、故障轉移
在一些情況下,例如,節點上的硬件故障或雲提供商故障,使得節點變得不可用。您可以使用kubectl drain命令將該節點上的pod遷移到集群的其他節點上,以保證業務的穩定運行。
在執行kubectl的drain命令時,將使用Cordon自動標記節點。
3、易於管理節點
在維護節點時,您可以使用Cordon命令將節點標記為不可調度,以避免節點被重新調度。同時,手動觸發該節點上的刪除操作。
例如,在您清理完成集群之後,您希望將節點再次納入集群。只需使用kubectl uncordon命令即可解除Cordon ,這將啟用kube-scheduler在該節點上創建Pod的能力。
四、使用實例
1、將節點標記為不可調度
$ kubectl cordon node-name
2、指定刪除Pod的超時時間
在拒絕kube-scheduler分配pod到被標記為不可調度的節點上後,您可以安全地維護或故障轉移。
在啟用kubectl drain命令之前,您可以指定刪除Pod的超時時間,如果Pod不在此期間內終止,並且沒有出現任何錯誤,drain命令將自動失敗並停止。
$ kubectl drain node-name --timeout=3600s
3、恢復節點的可調度性
當節點完成維護並且處於正常狀態後,需要將其重新引入群集,以便繼續分配Pod到該節點上。
$ kubectl uncordon node-name
五、總結
Kubernetes Cordon命令可以在需要對節點進行維護和故障轉移時,暫時停止在該節點上調度和創建Pod, 保護集群的高可用性和可靠性,同時維護管理員對集群的控制。Cordon命令使管理員可以輕鬆地將以更加可預測,可維護和可控制的方式管理節點,並確保應用程序不受影響。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152104.html