cordon節(jié)點(diǎn)drain驅(qū)逐節(jié)點(diǎn)delete節(jié)點(diǎn)詳解
一.系統(tǒng)環(huán)境
服務(wù)器版本 | docker軟件版本 | Kubernetes(k8s)集群版本 | CPU架構(gòu) |
---|---|---|---|
CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | v1.21.9 | x86_64 |
Kubernetes集群架構(gòu):k8scloude1作為master節(jié)點(diǎn),k8scloude2,k8scloude3作為worker節(jié)點(diǎn)
服務(wù)器 | 操作系統(tǒng)版本 | CPU架構(gòu) | 進(jìn)程 | 功能描述 |
---|---|---|---|---|
k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master節(jié)點(diǎn) |
k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節(jié)點(diǎn) |
k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節(jié)點(diǎn) |
二.前言
本文介紹cordon節(jié)點(diǎn),drain驅(qū)逐節(jié)點(diǎn),delete 節(jié)點(diǎn),在對(duì)k8s集群節(jié)點(diǎn)執(zhí)行維護(hù)(例如內(nèi)核升級(jí)、硬件維護(hù)等)時(shí)候會(huì)用到。
cordon節(jié)點(diǎn),drain驅(qū)逐節(jié)點(diǎn),delete 節(jié)點(diǎn)的前提是已經(jīng)有一套可以正常運(yùn)行的Kubernetes集群,關(guān)于Kubernetes(k8s)集群的安裝部署,可以查看博客《Centos7 安裝部署Kubernetes(k8s)集群》
三.cordon節(jié)點(diǎn)
3.1 cordon節(jié)點(diǎn)概覽
cordon 節(jié)點(diǎn)會(huì)使其停止調(diào)度,會(huì)將node狀態(tài)調(diào)為SchedulingDisabled,之后再創(chuàng)建新pod,新pod不會(huì)被調(diào)度到該節(jié)點(diǎn),原有的pod不會(huì)受到影響,仍正常對(duì)外提供服務(wù)。
3.2 cordon節(jié)點(diǎn)
創(chuàng)建目錄存放yaml文件
[root@k8scloude1 ~]# mkdir deploy [root@k8scloude1 ~]# cd deploy/
使用--dry-run生成deploy配置文件
[root@k8scloude1 deploy]# kubectl create deploy nginx --image=nginx --dry-run=client -o yaml >nginx.yaml [root@k8scloude1 deploy]# cat nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx name: nginx resources: {} status: {}
修改deploy配置文件,replicas: 5表示副本數(shù)為 5,deploy將創(chuàng)建5個(gè)pod
[root@k8scloude1 deploy]# vim nginx.yaml #修改配置文件: # replicas: 5 副本數(shù)修改為5 #terminationGracePeriodSeconds: 0 寬限期修改為0 # imagePullPolicy: IfNotPresent 鏡像下載策略為存在鏡像就不下載 [root@k8scloude1 deploy]# cat nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 5 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: terminationGracePeriodSeconds: 0 containers: - image: nginx name: nginx imagePullPolicy: IfNotPresent resources: {} status: {}
創(chuàng)建deploy和使用pod yaml文件創(chuàng)建pod
[root@k8scloude1 deploy]# cat pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod1 name: pod1 spec: terminationGracePeriodSeconds: 0 containers: - image: nginx imagePullPolicy: IfNotPresent name: n1 resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {} [root@k8scloude1 deploy]# kubectl apply -f pod.yaml pod/pod1 created [root@k8scloude1 deploy]# kubectl apply -f nginx.yaml deployment.apps/nginx created
查看pod,可以看到deploy生成5個(gè)pod(nginx-6cf858f6cf-XXXXXXX),還有一個(gè)pod1。
[root@k8scloude1 deploy]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-fwhmh 1/1 Running 0 52s 10.244.251.217 k8scloude3 <none> <none> nginx-6cf858f6cf-hr6bn 1/1 Running 0 52s 10.244.251.218 k8scloude3 <none> <none> nginx-6cf858f6cf-j2ccs 1/1 Running 0 52s 10.244.112.161 k8scloude2 <none> <none> nginx-6cf858f6cf-l7n4w 1/1 Running 0 52s 10.244.112.162 k8scloude2 <none> <none> nginx-6cf858f6cf-t6qxq 1/1 Running 0 52s 10.244.112.163 k8scloude2 <none> <none> pod1 1/1 Running 0 60s 10.244.251.216 k8scloude3 <none> <none>
假設(shè)某天要對(duì)k8scloude2進(jìn)行維護(hù)測(cè)試,不希望k8scloude2節(jié)點(diǎn)上被分配新的pod,可以對(duì)某個(gè)節(jié)點(diǎn)執(zhí)行cordon之后,此節(jié)點(diǎn)就不會(huì)再調(diào)度新的pod了
cordon k8scloude2節(jié)點(diǎn),k8scloude2節(jié)點(diǎn)變?yōu)镾chedulingDisabled狀態(tài)
[root@k8scloude1 deploy]# kubectl cordon k8scloude2 node/k8scloude2 cordoned [root@k8scloude1 deploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready,SchedulingDisabled <none> 7d23h v1.21.0 k8scloude3 Ready <none> 7d23h v1.21.0
kubectl scale deploy命令使nginx deploy的副本數(shù)擴(kuò)展為10個(gè)
[root@k8scloude1 deploy]# kubectl scale deploy nginx --replicas=10 deployment.apps/nginx scaled
查看pod,可以發(fā)現(xiàn)新生成的pod都被調(diào)度到到k8scloude3上,某個(gè)節(jié)點(diǎn)被cordon之后,新的pod將不被調(diào)度到該節(jié)點(diǎn),原先的pod不變。
[root@k8scloude1 deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-7fdnr 1/1 Running 0 4s 10.244.251.221 k8scloude3 <none> <none> nginx-6cf858f6cf-fwhmh 1/1 Running 0 9m9s 10.244.251.217 k8scloude3 <none> <none> nginx-6cf858f6cf-g92ls 1/1 Running 0 4s 10.244.251.219 k8scloude3 <none> <none> nginx-6cf858f6cf-hr6bn 1/1 Running 0 9m9s 10.244.251.218 k8scloude3 <none> <none> nginx-6cf858f6cf-j2ccs 1/1 Running 0 9m9s 10.244.112.161 k8scloude2 <none> <none> nginx-6cf858f6cf-l7n4w 1/1 Running 0 9m9s 10.244.112.162 k8scloude2 <none> <none> nginx-6cf858f6cf-lsvsg 1/1 Running 0 4s 10.244.251.223 k8scloude3 <none> <none> nginx-6cf858f6cf-mpwjl 1/1 Running 0 4s 10.244.251.222 k8scloude3 <none> <none> nginx-6cf858f6cf-s8x6b 1/1 Running 0 4s 10.244.251.220 k8scloude3 <none> <none> nginx-6cf858f6cf-t6qxq 1/1 Running 0 9m9s 10.244.112.163 k8scloude2 <none> <none> pod1 1/1 Running 0 9m17s 10.244.251.216 k8scloude3 <none> <none>
來(lái)個(gè)極端的例子,先把deploy的副本數(shù)變?yōu)?,再變?yōu)?0,此時(shí)所有的pod都運(yùn)行在k8scloude3節(jié)點(diǎn)了。
[root@k8scloude1 deploy]# kubectl scale deploy nginx --replicas=0 deployment.apps/nginx scaled [root@k8scloude1 deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod1 1/1 Running 0 10m 10.244.251.216 k8scloude3 <none> <none> [root@k8scloude1 deploy]# kubectl scale deploy nginx --replicas=10 deployment.apps/nginx scaled [root@k8scloude1 deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-5cx9s 1/1 Running 0 8s 10.244.251.231 k8scloude3 <none> <none> nginx-6cf858f6cf-6cblj 1/1 Running 0 8s 10.244.251.228 k8scloude3 <none> <none> nginx-6cf858f6cf-827cz 1/1 Running 0 8s 10.244.251.233 k8scloude3 <none> <none> nginx-6cf858f6cf-b989n 1/1 Running 0 8s 10.244.251.229 k8scloude3 <none> <none> nginx-6cf858f6cf-kwxhn 1/1 Running 0 8s 10.244.251.224 k8scloude3 <none> <none> nginx-6cf858f6cf-ljjxz 1/1 Running 0 8s 10.244.251.225 k8scloude3 <none> <none> nginx-6cf858f6cf-ltrpr 1/1 Running 0 8s 10.244.251.227 k8scloude3 <none> <none> nginx-6cf858f6cf-lwf7g 1/1 Running 0 8s 10.244.251.230 k8scloude3 <none> <none> nginx-6cf858f6cf-xw84l 1/1 Running 0 8s 10.244.251.226 k8scloude3 <none> <none> nginx-6cf858f6cf-zpwhq 1/1 Running 0 8s 10.244.251.232 k8scloude3 <none> <none> pod1 1/1 Running 0 11m 10.244.251.216 k8scloude3 <none> <none>
3.3 uncordon節(jié)點(diǎn)
要讓節(jié)點(diǎn)恢復(fù)調(diào)度pod,uncordon即可。
uncordon k8scloude2節(jié)點(diǎn),k8scloude2節(jié)點(diǎn)狀態(tài)變?yōu)镽eady,恢復(fù)調(diào)度。
#需要uncordon [root@k8scloude1 deploy]# kubectl uncordon k8scloude2 node/k8scloude2 uncordoned [root@k8scloude1 deploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready <none> 8d v1.21.0 k8scloude3 Ready <none> 8d v1.21.0
四.drain節(jié)點(diǎn)
4.1 drain節(jié)點(diǎn)概覽
在對(duì)節(jié)點(diǎn)執(zhí)行維護(hù)(例如內(nèi)核升級(jí)、硬件維護(hù)等)之前, 可以使用 kubectl drain 從節(jié)點(diǎn)安全地逐出所有 Pods。 安全的驅(qū)逐過(guò)程允許 Pod 的容器 體面地終止, 并確保滿足指定的 PodDisruptionBudgets,PodDisruptionBudget 是一個(gè)對(duì)象,用于定義可能對(duì)一組 Pod 造成的最大干擾。。
說(shuō)明: 默認(rèn)情況下, kubectl drain 將忽略節(jié)點(diǎn)上不能殺死的特定系統(tǒng) Pod;
'drain' 驅(qū)逐或刪除除鏡像 pod 之外的所有 pod(不能通過(guò) API 服務(wù)器刪除)。如果有 daemon set-managed pods,drain 不會(huì)在沒(méi)有 --ignore-daemonsets 的情況下繼續(xù)進(jìn)行,并且無(wú)論如何它都不會(huì)刪除任何 daemon set-managed pods,因?yàn)檫@些 pods 將立即被 daemon set 控制器替換,它會(huì)忽略不可調(diào)度的標(biāo)記。如果有任何 pod 既不是鏡像 pod,也不是由復(fù)制控制器、副本集、守護(hù)程序集、有狀態(tài)集或作業(yè)管理的,那么除非您使用 --force,否則 drain 不會(huì)刪除任何 pod。如果一個(gè)或多個(gè) pod 的管理資源丟失, --force 也將允許繼續(xù)刪除。
kubectl drain 的成功返回,表明所有的 Pods(除了上一段中描述的被排除的那些), 已經(jīng)被安全地逐出(考慮到期望的終止寬限期和你定義的 PodDisruptionBudget)。 然后就可以安全地關(guān)閉節(jié)點(diǎn), 比如關(guān)閉物理機(jī)器的電源,如果它運(yùn)行在云平臺(tái)上,則刪除它的虛擬機(jī)。
4.2 drain 節(jié)點(diǎn)
查看node狀態(tài)和pod
[root@k8scloude1 deploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready <none> 8d v1.21.0 k8scloude3 Ready <none> 8d v1.21.0 [root@k8scloude1 deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-58wnd 1/1 Running 0 65s 10.244.112.167 k8scloude2 <none> <none> nginx-6cf858f6cf-5rrk4 1/1 Running 0 65s 10.244.112.164 k8scloude2 <none> <none> nginx-6cf858f6cf-86wxr 1/1 Running 0 65s 10.244.251.237 k8scloude3 <none> <none> nginx-6cf858f6cf-89wj9 1/1 Running 0 65s 10.244.112.168 k8scloude2 <none> <none> nginx-6cf858f6cf-9njrj 1/1 Running 0 65s 10.244.251.236 k8scloude3 <none> <none> nginx-6cf858f6cf-hchtb 1/1 Running 0 65s 10.244.251.234 k8scloude3 <none> <none> nginx-6cf858f6cf-mb2ft 1/1 Running 0 65s 10.244.112.166 k8scloude2 <none> <none> nginx-6cf858f6cf-nq6zv 1/1 Running 0 65s 10.244.112.169 k8scloude2 <none> <none> nginx-6cf858f6cf-pl7ww 1/1 Running 0 65s 10.244.251.235 k8scloude3 <none> <none> nginx-6cf858f6cf-sf2w6 1/1 Running 0 65s 10.244.112.165 k8scloude2 <none> <none> pod1 1/1 Running 0 36m 10.244.251.216 k8scloude3 <none> <none>
drain驅(qū)逐節(jié)點(diǎn):drain=cordon+evicted
drain k8scloude2節(jié)點(diǎn),--delete-emptydir-data刪除數(shù)據(jù),--ignore-daemonsets忽略daemonsets
[root@k8scloude1 deploy]# kubectl drain k8scloude2 node/k8scloude2 cordoned error: unable to drain node "k8scloude2", aborting command... There are pending nodes to be drained: k8scloude2 cannot delete Pods with local storage (use --delete-emptydir-data to override): kube-system/metrics-server-bcfb98c76-k5dmj cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-nsbfs, kube-system/kube-proxy-lpj8z [root@k8scloude1 deploy]# kubectl get node NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready,SchedulingDisabled <none> 8d v1.21.0 k8scloude3 Ready <none> 8d v1.21.0 [root@k8scloude1 deploy]# kubectl drain k8scloude2 --ignore-daemonsets node/k8scloude2 already cordoned error: unable to drain node "k8scloude2", aborting command... There are pending nodes to be drained: k8scloude2 error: cannot delete Pods with local storage (use --delete-emptydir-data to override): kube-system/metrics-server-bcfb98c76-k5dmj [root@k8scloude1 deploy]# kubectl drain k8scloude2 --ignore-daemonsets --force --delete-emptydir-data node/k8scloude2 already cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-nsbfs, kube-system/kube-proxy-lpj8z evicting pod pod/nginx-6cf858f6cf-sf2w6 evicting pod pod/nginx-6cf858f6cf-5rrk4 evicting pod kube-system/metrics-server-bcfb98c76-k5dmj evicting pod pod/nginx-6cf858f6cf-58wnd evicting pod pod/nginx-6cf858f6cf-mb2ft evicting pod pod/nginx-6cf858f6cf-89wj9 evicting pod pod/nginx-6cf858f6cf-nq6zv pod/nginx-6cf858f6cf-5rrk4 evicted pod/nginx-6cf858f6cf-mb2ft evicted pod/nginx-6cf858f6cf-sf2w6 evicted pod/nginx-6cf858f6cf-58wnd evicted pod/nginx-6cf858f6cf-nq6zv evicted pod/nginx-6cf858f6cf-89wj9 evicted pod/metrics-server-bcfb98c76-k5dmj evicted node/k8scloude2 evicted
查看pod,k8scloude2節(jié)點(diǎn)被drain之后,pod都調(diào)度到了k8scloude3節(jié)點(diǎn)。
節(jié)點(diǎn)被drain驅(qū)逐的本質(zhì)就是刪除節(jié)點(diǎn)上的pod,k8scloude2節(jié)點(diǎn)被drain驅(qū)逐之后,k8scloude2上運(yùn)行的pod會(huì)被刪除。
deploy是一個(gè)控制器,會(huì)監(jiān)控pod的副本數(shù),當(dāng)k8scloude2上的pod被驅(qū)逐之后,副本數(shù)少于10,于是在可調(diào)度的節(jié)點(diǎn)創(chuàng)建pod,補(bǔ)足副本數(shù)。
單獨(dú)的pod不具備再生性,刪除之后就真刪除了,如果k8scloude3被驅(qū)逐,則pod pod1會(huì)被刪除,其他可調(diào)度節(jié)點(diǎn)也不會(huì)再生一個(gè)pod1。
[root@k8scloude1 deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-7gh4z 1/1 Running 0 84s 10.244.251.240 k8scloude3 <none> <none> nginx-6cf858f6cf-7lmfd 1/1 Running 0 85s 10.244.251.238 k8scloude3 <none> <none> nginx-6cf858f6cf-86wxr 1/1 Running 0 6m14s 10.244.251.237 k8scloude3 <none> <none> nginx-6cf858f6cf-9bn2b 1/1 Running 0 85s 10.244.251.243 k8scloude3 <none> <none> nginx-6cf858f6cf-9njrj 1/1 Running 0 6m14s 10.244.251.236 k8scloude3 <none> <none> nginx-6cf858f6cf-bqk2w 1/1 Running 0 84s 10.244.251.241 k8scloude3 <none> <none> nginx-6cf858f6cf-hchtb 1/1 Running 0 6m14s 10.244.251.234 k8scloude3 <none> <none> nginx-6cf858f6cf-hjddp 1/1 Running 0 84s 10.244.251.244 k8scloude3 <none> <none> nginx-6cf858f6cf-pl7ww 1/1 Running 0 6m14s 10.244.251.235 k8scloude3 <none> <none> nginx-6cf858f6cf-sgxfg 1/1 Running 0 84s 10.244.251.242 k8scloude3 <none> <none> pod1 1/1 Running 0 41m 10.244.251.216 k8scloude3 <none> <none>
查看node節(jié)點(diǎn)狀態(tài)
[root@k8scloude1 deploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready,SchedulingDisabled <none> 8d v1.21.0 k8scloude3 Ready <none> 8d v1.21.0
4.3 uncordon節(jié)點(diǎn)
要取消drain某個(gè)節(jié)點(diǎn),直接uncordon即可,沒(méi)有undrain操作。
[root@k8scloude1 deploy]# kubectl undrain k8scloude2 Error: unknown command "undrain" for "kubectl" Did you mean this? drain Run 'kubectl --help' for usage.
uncordon k8scloude2節(jié)點(diǎn),節(jié)點(diǎn)恢復(fù)調(diào)度
[root@k8scloude1 deploy]# kubectl uncordon k8scloude2 node/k8scloude2 uncordoned [root@k8scloude1 deploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 8d v1.21.0 k8scloude2 Ready <none> 8d v1.21.0 k8scloude3 Ready <none> 8d v1.21.0
把deploy副本數(shù)變?yōu)?,再變?yōu)?0,再觀察pod分布
[root@k8scloude1 deploy]# kubectl scale deploy nginx --replicas=0 deployment.apps/nginx scaled [root@k8scloude1 deploy]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod1 1/1 Running 0 52m 10.244.251.216 k8scloude3 <none> <none> [root@k8scloude1 deploy]# kubectl scale deploy nginx --replicas=10 deployment.apps/nginx scaled
k8scloude2節(jié)點(diǎn)恢復(fù)可調(diào)度pod狀態(tài)
[root@k8scloude1 deploy]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6cf858f6cf-4sqj8 1/1 Running 0 6s 10.244.112.172 k8scloude2 <none> <none> nginx-6cf858f6cf-cjqxv 1/1 Running 0 6s 10.244.112.176 k8scloude2 <none> <none> nginx-6cf858f6cf-fk69r 1/1 Running 0 6s 10.244.112.175 k8scloude2 <none> <none> nginx-6cf858f6cf-ghznd 1/1 Running 0 6s 10.244.112.173 k8scloude2 <none> <none> nginx-6cf858f6cf-hnxzs 1/1 Running 0 6s 10.244.251.246 k8scloude3 <none> <none> nginx-6cf858f6cf-hshnm 1/1 Running 0 6s 10.244.112.171 k8scloude2 <none> <none> nginx-6cf858f6cf-jb5sh 1/1 Running 0 6s 10.244.112.170 k8scloude2 <none> <none> nginx-6cf858f6cf-l9xlm 1/1 Running 0 6s 10.244.112.174 k8scloude2 <none> <none> nginx-6cf858f6cf-pgjlb 1/1 Running 0 6s 10.244.251.247 k8scloude3 <none> <none> nginx-6cf858f6cf-rlnh6 1/1 Running 0 6s 10.244.251.245 k8scloude3 <none> <none> pod1 1/1 Running 0 52m 10.244.251.216 k8scloude3 <none> <none>
刪除deploy,刪除pod。
[root@k8scloude1 deploy]# kubectl delete -f nginx.yaml deployment.apps "nginx" deleted [root@k8scloude1 deploy]# kubectl delete pod pod1 --force warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "pod1" force deleted [root@k8scloude1 deploy]# kubectl get pods -o wide No resources found in pod namespace.
五.delete 節(jié)點(diǎn)
5.1 delete節(jié)點(diǎn)概覽
delete 刪除節(jié)點(diǎn)就直接把一個(gè)節(jié)點(diǎn)就k8s集群中刪除了,delete 節(jié)點(diǎn)之前需要先drain 節(jié)點(diǎn)。
關(guān)于delete節(jié)點(diǎn)以及重裝節(jié)點(diǎn)的詳細(xì)內(nèi)容,請(qǐng)查看博客《模擬重裝Kubernetes(k8s)集群:刪除k8s集群然后重裝》
5.2 delete節(jié)點(diǎn)
kubectl drain 安全驅(qū)逐節(jié)點(diǎn)上面所有的 pod,--ignore-daemonsets往往需要指定的,這是因?yàn)閐eamonset會(huì)忽略SchedulingDisabled標(biāo)簽(使用kubectl drain時(shí)會(huì)自動(dòng)給節(jié)點(diǎn)打上不可調(diào)度SchedulingDisabled標(biāo)簽),因此deamonset控制器控制的pod被刪除后,可能馬上又在此節(jié)點(diǎn)上啟動(dòng)起來(lái),這樣就會(huì)成為死循環(huán)。因此這里忽略daemonset。
[root@k8scloude1 ~]# kubectl drain k8scloude3 --ignore-daemonsets node/k8scloude3 cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-wmz4r, kube-system/kube-proxy-84gcx evicting pod kube-system/calico-kube-controllers-6b9fbfff44-rl2mh pod/calico-kube-controllers-6b9fbfff44-rl2mh evicted node/k8scloude3 evicted
k8scloude3變?yōu)镾chedulingDisabled
[root@k8scloude1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 64m v1.21.0 k8scloude2 Ready <none> 56m v1.21.0 k8scloude3 Ready,SchedulingDisabled <none> 56m v1.21.0
刪除節(jié)點(diǎn)k8scloude3
[root@k8scloude1 ~]# kubectl delete nodes k8scloude3 node "k8scloude3" deleted [root@k8scloude1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8scloude1 Ready control-plane,master 65m v1.21.0 k8scloude2 Ready <none> 57m v1.21.0
以上就是cordon節(jié)點(diǎn)drain驅(qū)逐節(jié)點(diǎn)delete節(jié)點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于cordon drain delete節(jié)點(diǎn)詳解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Windows?利用?WSL2?安裝?Docker?的2種方式
這篇文章主要介紹了Windows?利用?WSL2?安裝?Docker?的2種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10Docker容器間通訊直接路由方式實(shí)現(xiàn)網(wǎng)絡(luò)通訊
今天小編就為大家分享一篇關(guān)于Docker容器間通訊直接路由方式實(shí)現(xiàn)網(wǎng)絡(luò)通訊,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Docker學(xué)習(xí)之搭建ActiveMQ消息服務(wù)的方法步驟
這篇文章主要介紹了Docker學(xué)習(xí)之搭建ActiveMQ消息服務(wù)的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09