手动迁移
我们还可以使用cordon、drain、uncordor三个命令实现节点的主动维护。此时需要用到以下三个命令:
cordon:标记节点不可调度,后续新的pod不会被调度到此节点,但是该节点上的pod可以正常对外服务;
drain:驱逐节点上的pod至其他可调度节点;
uncordon:标记节点可调度;
具体操作过程如下:
# 1.标记节点不可调度
# kubectl cordon k8s-3-219
node/k8s-3-219 cordoned
# 查看节点状态,此时219被标记为不可调度
# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-3-217 Ready master 89d v1.18.2
k8s-3-218 Ready <none> 88d v1.18.2
k8s-3-219 Ready,SchedulingDisabled <none> 88d v1.18.2
# 2.驱逐pod
# kubectl drain k8s-3-219 --delete-local-data --ignore-daemonsets --force
node/k8s-3-219 already cordoned
WARNING: ignoring DaemonSet-managed Pods: ingress-nginx/nginx-ingress-controller-gmzq6, kube-system/kube-flannel-ds-amd64-5gfwh, kube-system/kube-proxy-vdckk
evicting pod kube-system/tiller-deploy-6c65968d87-75pfm
evicting pod kube-system/metrics-server-7f96bbcc66-bgt7j
evicting pod test/helloworld-79956d95b4-nnlrq
# 参数如下:
--delete-local-data 删除本地数据,即使emptyDir也将删除;
--ignore-daemonsets 忽略DeamonSet,否则DeamonSet被删除后,仍会自动重建;
--force 不加force参数只会删除该node节点上的ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job,加上后所有pod都将删除;
# 3. 查看驱逐,219上的pod迁移到218上了。
# kubectl get pod -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
helloworld-79956d95b4-gg58c 0/1 Running 0 20s 10.244.1.165 k8s-3-218 <none> <none>
helloworld-79956d95b4-nnlrq 1/1 Terminating 0 77m 10.244.2.215 k8s-3-219 <none> <none>
daemonsets不用管 deployments会自动迁移, statefulset需要手动同时删除pvc + pod 让其调度到其他节点
此时与默认迁移不同的是,pod会先重建再终止,此时的服务中断时间=重建时间+服务启动时间+readiness探针检测正常时间,必须等到1/1 Running服务才会正常。因此在单副本时迁移时,服务终端是不可避免的。
4. 下掉节点
#kubectl delete nodes <node节点名称>
网友评论