Kubernetes pod平滑遷移


pod平滑遷移

使用到的命令 (cordon, drain, uncordon)
這三個命令是正式release的1.2新加入的命令,三個命令一起介紹,是因為三個命令配合使用可以實現節點的維護。在1.2之前,因為沒有相應的命令支持,如果要維護一個節點,只能stop該節點上的kubelet將該節點退出集群,是集群不在將新的pod調度到該節點上。如果該節點上本生就沒有pod在運行,則不會對業務有任何影響。如果該節點上有pod正在運行,kubelet停止后,master會發現該節點不可達,而將該節點標記為notReady狀態,不會將新的節點調度到該節點上。同時,會在其他節點上創建新的pod替換該節點上的pod。這種方式雖然能夠保證集群的健壯性,但是任然有些暴力,如果業務只有一個副本,而且該副本正好運行在被維護節點上的話,可能仍然會造成業務的短暫中斷。
1.2中新加入的這3個命令可以保證維護節點時,平滑的將被維護節點上的業務遷移到其他節點上,保證業務不受影響。如下圖所示是一個整個的節點維護的流程(為了方便demo增加了一些查看節點信息的操作):
1)首先查看當前集群所有節點狀態,可以看到共六個節點都處於ready狀態;


2)查看當前有的pod運行在izj6c6evv00x6w8sbpyokpz 節點上;


3)使用cordon命令將izj6c6evv00x6w8sbpyokpz 標記為不可調度;

[root@cn-hongkong ~]# kubectl cordon izj6c6evv00x6w8sbpyokpz

 
4)再使用kubectl get nodes查看節點狀態,發現izj6c6evv00x6w8sbpyokpz 雖然還處於Ready狀態,但是同時還被禁能了調度,這意味着新的pod將不會被調度到izj6c6evv00x6w8sbpyokpz 上。


5)再查看pod狀態,沒有任何變化,有的副本仍運行在izj6c6evv00x6w8sbpyokpz上;

6)執行drain命令,將運行在izj6c6evv00x6w8sbpyokpz上運行的pod平滑的趕到其他節點上;

kubectl drain izj6c6evv00x6w8sbpyokpz --delete-local-data --ignore-daemonsets --force


7)再查看nginx的狀態發現,izj6c6evv00x6w8sbpyokpz 上的副本已經被遷移到k-node1上;這時候就可以對izj6c6evv00x6w8sbpyokpz進行一些節點維護的操作,如升級內核,升級Docker等;

8)節點維護完后,使用uncordon命令解鎖izj6c6evv00x6w8sbpyokpz,使其重新變得可調度;

 kubectl uncordon izj6c6evv00x6w8sbpyokpz

9)檢查節點狀態,發現izj6c6evv00x6w8sbpyokpz重新變回Ready狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM