使用Kubeadm 添加或者删除 master节点, 如果集群已经存在 可以删除节点,在重新加入。
具体删除办法如下,Master 节点和 Worker 节点都一样:
# 先将节点标记为不可调度的维护模式
kubectl drain master2 --delete-local-data --ignore-daemonsets --force
删除 Master 节点 etcd
# 登录集群的任意 ETCD Pod
kubectl exec -it etcd-master 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
# 删除etcd3节点
etcdctl member remove 58372e8d4ff228e
删除node节点
kubectl delete node master3
Master 节点数据,然后加入 Mater 节点则没问题了。
kubeadm reset -f
# 清除数据
ipvsadm --clear
rm -rf ~/.kube
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes
# 关闭 kubelet
systemctl stop kubelet
集群 Token 过期
在集群初始化的时候有生成加入集群的命令,token有效期24小时。如果过期或者忘记就需要重新生成。
查看现有的 Token:
kubeadm token list
如果列出的 Token 都过期了,就需要重新生成 Token:
kubeadm token create
有了 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.116.151:16443 --token Token地址 --discovery-token-ca-cert-hash sha256:生成的Hash值
当然这样分两次生成比较麻烦,可以在创建 Token 的时候就直接生成整个 Worker 加入集群命令:
kubeadm token create --print-join-command
kubeadm join 192.168.116.151:6443 --token 3vw616.zkm77jzu6nszh72v --discovery-token-ca-cert-hash sha256:aa6234ad787c2c01c516e5c5464f2b0899fe92238624ed810a511dcb4b82cb3a
对于 Master 节点加入集群,除了 Worker 节点加入集群的参数,还需要 --certificate-key
新生成的证书 Key:
生成 -certificate-key
新生成的证书 Key:
[root@master1 ~]# kubeadm init phase upload-certs --upload-certs
W0517 13:21:35.741511 15159 version.go:103] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get "https://storage.googlea pis.com/kubern etes-release/release/stable-1.txt": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
W0517 13:21:35.741603 15159 version.go:104] falling back to the local client version: v1.24.4
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
a37c8f281c043354d8d89bb6215d4bea9ab2f6c0108ade18566be273e377dc4d
#如果安装没有使用 kubeadm-config.yaml 文件
kubeadm init --config /root/kubeadm/kubeadm-config.yaml phase upload-certs --upload-certs
master3 加入到控制平面
kubeadm join 192.168.116.151:6443 --token 3vw616.zkm77jzu6nszh72v --discovery-token-ca-cert-hash sha256:aa6234ad787c2c01c516e5c5464f2b0899fe92238624ed810a511dcb4b82cb3a \
--control-plane --certificate-key a37c8f281c043354d8d89bb6215d4bea9ab2f6c0108ade18566be273e377dc4d
从一个master1, 添加 master2 master3
需要修改configmap 中的 kubeadm-config