05. Kubernetes - Kubeadm 节点 / Token 管理
删除节点
有些时候某些机器出现问题可能需要将其下掉,或者在初始化节点的时候信息初始化的有问题需要重新加入,这时候就涉及到删除节点的问题。
具体删除办法如下,Master 节点和 Worker 节点都一样:
# 先将节点标记为不可调度的维护模式
kubectl drain master-03 --delete-local-data --ignore-daemonsets --force
查看标记效果:
如果标记标记节点写错了可以恢复调度:
kubectl uncordon master-03
从集群中删除标记节点:
# 删除节点
kubectl delete nodes master-03
清空删除节点的数据:
# 重置节点
kubeadm reset -f
# 清除数据
ipvsadm --clear
rm -rf ~/.kube
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes
# 关闭 kubelet
systemctl stop kubelet
加集群 Token 过期 / 忘记
在集群初始化的时候有生成加入集群的命令,但是这个命令是有有效期的。如果过期或者忘记就需要重新生成。
查看现有的 Token:
kubeadm token list
如果列出的 Token 都过期了,就需要重新生成 Token:
kubeadm token create
此时查看 Token:
这样创建的 Token 有效期为 24 小时。
有了 Token 还不够,Worker 节点加入命令中还需要 --discovery-token-ca-cert-hash
CA 证书 Hash 值:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
此时就可以生成 Woker 节点加入集群的命令:
kubeadm join 192.168.200.100:16443 --token Token地址 --discovery-token-ca-cert-hash sha256:生成的Hash值
当然这样分两次生成比较麻烦,可以在创建 Token 的时候就直接生成整个 Worker 加入集群命令:
kubeadm token create --print-join-command
如图所示:
对于 Master 节点加入集群,除了 Worker 节点加入集群的参数,还需要 --certificate-key
新生成的证书 Key:
kubeadm init --config /ezops/kubeadm/kubeadm-config-new.yaml phase upload-certs --upload-certs
此时还会用到初始化集群时候的配置文件,如图所示:
此时将命令拼接一下即可:
kubeadm join 192.168.200.100:16443 --token Token地址 --discovery-token-ca-cert-hash sha256:生成的Hash值 --control-plane --certificate-key 生成的Key
对于全新的 Master 节点,使用上面命令加入集群是没问题的,但是如果那个节点是前面踢掉的,就会有问题。
踢掉的 Master 节点加入集群
踢掉的 Master 节点加入集群会出现报错:
[control-plane] Creating static Pod manifest for "kube-scheduler"
[check-etcd] Checking that the etcd cluster is healthy
error execution phase check-etcd: etcd cluster is not healthy: failed to dial endpoint https://192.168.200.103:2379 with maintenance client: context deadline exceeded
To see the stack trace of this error execute with --v=5 or higher
原因在于集群的 ETCD 中还有存储它的相关信息,需要先清理掉。
# 登录集群的任意 ETCD Pod
kubectl exec -it etcd-master-01 sh -n kube-system
# Pod 中设置登录 ETCD 的命令
export ETCDCTL_API=3
alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
# 查看集群节点列表
etcdctl member list
# 删除节点
etcdctl member remove 50d272e8d4c41a8e
如图所示:
此时再次清空新的 Master 节点数据,然后加入 Mater 节点则没问题了。
kubeadm reset -f
# 清除数据
ipvsadm --clear
rm -rf ~/.kube
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes
# 关闭 kubelet
systemctl stop kubelet