Kubernetes(K8s)中使用Kubectl 命令行工具管理 Kubernetes 集群。 kubectl 在 $HOME/.kube 目錄中查找一個(gè)名為 config 的配置文件。 可以通過設(shè)置 KUBECONFIG 環(huán)境變量或設(shè)置 --kubeconfig 參數(shù)來指定其它 kubeconfig 文件。本文主要介紹Kubernetes(K8s)中kubectl cordon, drain, uncordon 常用命令。
1、Kubectl語法
kubectl cordon NODE
kubectl drain NODE
kubectl uncordon NODE
cordon, drain, uncordon:命令是正式release的1.2新加入的命令,三個(gè)命令需要配合使用可以實(shí)現(xiàn)節(jié)點(diǎn)的維護(hù)。
在1.2之前,由于沒有相應(yīng)的命令支持,如果要維護(hù)一個(gè)節(jié)點(diǎn),只能stop該節(jié)點(diǎn)上的kubelet將該節(jié)點(diǎn)退出集群,是集群不在將新的pod調(diào)度到該節(jié)點(diǎn)上。如果該節(jié)點(diǎn)上本身就沒有pod在運(yùn)行,則不會對業(yè)務(wù)有任何影響。如果該節(jié)點(diǎn)上有pod正在運(yùn)行,kubelet停止后,master會發(fā)現(xiàn)該節(jié)點(diǎn)不可達(dá),而將該節(jié)點(diǎn)標(biāo)記為notReady狀態(tài),不會將新的節(jié)點(diǎn)調(diào)度到該節(jié)點(diǎn)上。同時(shí),會在其他節(jié)點(diǎn)上創(chuàng)建新的pod替換該節(jié)點(diǎn)上的pod。
如此雖能夠保證集群的健壯性,但可能還有點(diǎn)問題,如果業(yè)務(wù)只有一個(gè)副本,而且該副本正好運(yùn)行在被維護(hù)節(jié)點(diǎn)上的話,可能仍然會造成業(yè)務(wù)的短暫中斷。
1.2中新加入的這3個(gè)命令可以保證維護(hù)節(jié)點(diǎn)時(shí),平滑的將被維護(hù)節(jié)點(diǎn)上的業(yè)務(wù)遷移到其他節(jié)點(diǎn)上,保證業(yè)務(wù)不受影響。
如下是整個(gè)的節(jié)點(diǎn)維護(hù)的流程:
1)首先查看當(dāng)前集群所有節(jié)點(diǎn)狀態(tài),例如共有四個(gè)節(jié)點(diǎn)都處于ready狀態(tài);
2)查看當(dāng)前nginx兩個(gè)副本分別運(yùn)行在d-node1和k-node2兩個(gè)節(jié)點(diǎn)上;
3)使用cordon命令將d-node1標(biāo)記為不可調(diào)度;
4)再使用kubectl get nodes查看節(jié)點(diǎn)狀態(tài),發(fā)現(xiàn)d-node1雖然還處于Ready狀態(tài),但是同時(shí)還能被禁調(diào)度,代表新的pod將不會被調(diào)度到d-node1上。
5)再查看nginx狀態(tài),沒有任何變化,兩個(gè)副本仍運(yùn)行在d-node1和k-node2上;
6)執(zhí)行drain命令,將運(yùn)行在d-node1上運(yùn)行的pod平滑的趕到其他節(jié)點(diǎn)上;
可以不用驅(qū)離,也可以使用delete po 讓其重生至其他節(jié)點(diǎn)
7)再查看nginx的狀態(tài)發(fā)現(xiàn),d-node1上的副本已經(jīng)被遷移到k-node1上;此時(shí)就可以對d-node1進(jìn)行一些節(jié)點(diǎn)維護(hù)的操作,如升級內(nèi)核,升級Docker等;
8)節(jié)點(diǎn)維護(hù)完后,使用uncordon命令解鎖d-node1,使其重新變得可調(diào)度;
9)檢查節(jié)點(diǎn)狀態(tài),發(fā)現(xiàn)d-node1重新變回Ready狀態(tài)。
K8S中的cordon、uncordon和drain https://www.jianshu.com/p/752be98e9077
例子:
k8s集群節(jié)點(diǎn)只擴(kuò)容CPU和內(nèi)存,擴(kuò)容后的配置為CPU=xxxC,MEM=xxxG
Deployment副本數(shù)縮容
while read line;do kubectl scale -n live deploy $line --replicas=1;done < /root/xxx.txt
設(shè)置節(jié)點(diǎn)不可調(diào)度,逐臺進(jìn)行
kubectl cordon xxx-node-01
kubectl cordon xxx-node-02
kubectl cordon xxx-node-03
驅(qū)逐節(jié)點(diǎn)上的pod,逐臺進(jìn)行
kubectl drain xxx-node-01 --force --ignore-daemonsets
kubectl drain xxx-node-02 --force --ignore-daemonsets
kubectl drain xxx-node-03 --force --ignore-daemonsets
擴(kuò)容完畢恢復(fù)節(jié)點(diǎn)可調(diào)度
kubectl uncordon xxx-node-01
kubectl uncordon xxx-node-02
kubectl uncordon xxx-node-03
服務(wù)恢復(fù)雙副本文章來源:http://www.zghlxwxcb.cn/news/detail-842492.html
while read line;do kubectl scale -n live deploy $line --replicas=2;done < /root/xxx.txt
參考
K8S中的cordon、uncordon和drain文章來源地址http://www.zghlxwxcb.cn/news/detail-842492.html
到了這里,關(guān)于【k8s】K8S中的cordon、uncordon和drain 凍結(jié)節(jié)點(diǎn)、驅(qū)離pod的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!