Node的扩缩容
在实际生产系统中经常遇到服务器容量不足的情况,这时候就需要购买新的服务器,对应用系统进行水平扩展以实现扩容。
在k8s中,对一个新的node的加入非常简单,只需要在node节点上安装docker、kubelet和kube-proxy服务,然后将kubelet和kube-proxy的启动参数中的master url指定为当前kubernetes集群master的地址,然后启动服务即可。基于kubelet的自动注册机制,新的node会自动加入现有的kubernetes集群中,如下图:
kubectl drain 安全驱逐节点上面所有的 pod
安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisruptionBudgets 执行优雅的中止。
注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod,如果您想了解更多详细的内容,请参考kubectl drain
[root@edunode251 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-node1 Ready master 4d1h v1.12.3
k8s-node2 Ready <none> 4d v1.12.3
k8s-node3 Ready <none> 4d v1.12.3
k8s-node4 Ready <none> 89m v1.12.3
# #将当前运行在该节点上的容器驱离
kubectl drain k8s-node4
#将该节点设置为不可调度模式
kubectl cordon k8s-node4
执行完成后,如果没有任何错误返回,您可以关闭节点(如果是在云平台上,可以删除支持该节点的虚拟机)。如果在维护操作期间想要将节点留在集群,那么您需要运行下面命令:
kubectl uncordon k8s-node4
将该节点设置为不可调度模式
#将该节点设置为不可调度模式
kubectl cordon k8s-node4
#将该节点设置为可调度模式:
kubectl uncordon k8s-node4
删除node节点
kubectl delete node k8s-node4
kubeadm reset
# 在被删除的节点执行
kubeadm reset -f
删除废弃网络(如果不执行,此节点加入其他集群会出错)
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/