【容器化】Kubernetes优雅新增或移除节点

新增节点

1. 集群内所有节点的hosts文件加上新节点解析

1
2
3
4
5
# 进入hosts文件编辑
vi /etc/hosts

## 在文件中加入下面内容
[new-node-ip] [new-node-hostname]

2. 进入Master节点,查看当前是否存在可用Token,没有任何输出说明当前没有可用Token

1
kubeadm token list

3. 创建Token

1
kubeadm token create

结果截图:

4. 再次查看可用Token,可查看Token的一些信息

1
kubeadm token list

结果截图:

5. 根据ca的公钥证书数据计算出hash值

1
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1

结果截图:

6. 新节点安装kubectl、kubeadm、kubelet,版本需和Master的一致

1
2
3
yum -y install kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet

7. 把新节点加入到集群中,其中使用到上述获取的Token和ca证书的hash值

1
kubeadm join <master-ip>:6443 --node-name [new-node-hostname] --token kklhin.swv9pvue5jncxzqs --discovery-token-ca-cert-hash sha256:7e0f436144520310a988005261894d4c82c36c99c0db9e71e4daac5546d5f159

移除节点

1. 进入到Master节点,驱逐待移除节点上的pod

参数说明

  • –force
    当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候
    就需要用–force来强制执行 (例如:kube-proxy)
  • –ignore-daemonsets
    无视DaemonSet管理下的Pod
  • –delete-local-data
    如果有mount local volumn的pod,会强制杀掉该pod并把料清除掉
    另外如果跟本身的配置讯息有冲突时,drain就不会执行
1
kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data

结果截图

2. 删除节点

1
kubectl delete node [node-name]

3. 进入待删除节点,重置节点

1
kubeadm reset

4. (可选)移除待删除节点的Kubernetes网络配置

1
2
# 查看网络配置
ip a

结果截图

发现有两个Kubernetes的网络配置(flannel.1和cni0)是已无用网络配置,对其进行下线及删除

1
2
3
4
5
ifconfig cni0 down
ifconfig flannel.1 down
ip link delete cni0
ip link delete flannel.1
ip a

结果截图

(•̀ᴗ•́)و ̑̑

Share