在k8s的项目中今天需要停止某一节点的服务,对该节点进行更新、升级、或者是更换硬件时,这个时候需要对节点进行设置,让其不参与k8s的调度,具体的设置方法如下
使用cordon设置节点不可调度
kubectl cordon node_name kubectl uncordon node_name #取消不可调度
当使用cordon来设置节点不可调度时,目前运行在该节点上的POD不受影响,能够继续运行
当使用cordon设置以后查看node时,该节status后面会跟一个SchedulingDisabled的状态
如果我们想该节点上不调度任务POD,那么此时我们可以使用drain命令来驱逐
kubectl drain node_name --delete-local-data --ignore-daemonsets --force
–delete-local-data :即使pod使用了emptyDir也删除; –ignore-daemonsets :忽略deamonset控制器的pod,如果不忽略,deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环 –force :不加force参数只会删除该NODE上由ReplicationController, ReplicaSet,DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除’裸奔的pod’
节点删除的方法
kubectl delete node node_name
然后去该节点上执行
kubeadm reset
重新加入该节点的方法,在master上执行
kubeadm token create --print-join-command
上述命令会生成加入集群命令,然后去之前删除的节点执行下列命令
kubeadm join 192.168.90.220:6443 --token si8a8j.7ykocpr5nqsqmt7v --discovery-token-ca-cert-hash sha256:1977d7ea82e2afe92573e8f6d35705470b6bba6a1b2a63ac25bef680a50ec121
最后检查下节点状态
kubectl get node -o wide