因服务器升级迁移,需要将升级的节点上的pod迁移到其他节点。
可以改yaml中指定临时标签,重新部署,但比较麻烦,通常会采用cordon/uncordon节点的方案。
集群中三个节点:
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 129d v1.15.9
k8s-node1 Ready <none> 129d v1.15.9
k8s-node2 Ready <none> 129d v1.15.9
kubectl cordon k8s-node2 #将节点2设置不不可调度
但此时是新的pod不会再分配到该节点,但原节点2上的pod不会自动迁移,node2的状态为 Ready,SchedulingDisabled
k8s-master Ready master 129d v1.15.9
k8s-node1 Ready <none> 129d v1.15.9
k8s-node2 Ready,SchedulingDisabled <none> 129d v1.15.9
执行如下命令迁移节点的pod
kubectl drain k8s-node2 --delete-local-data --ignore-daemonsets --force
输出:
node/k8s-node2 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-64zsm, kube-system/kube-proxy-b669n
evicting pod "kong-konga-7cbf568cd7-8mw97"
evicting pod "netcore-01-blue-7fb69d9db5-pdgjq"
pod/netcore-01-blue-7fb69d9db5-pdgjq evicted
pod/kong-konga-7cbf568cd7-8mw97 evicted
node/k8s-node2 evicted
节点2维护完毕后,可以再将节点2还原成Ready可分配的状态
kubectl uncordon k8s-node2