K8s环境使用老IP添加一个新的master节点
注:以下为k8s 1.16版本,并且是新加节点,无备份的操作
备份
配置etcd 3
1 2
|
docker cp `docker ps |grep etcd |grep -v pause |awk '{print $1}'`:/usr/local/bin/etcdctl /tmp/
export `cat /etc/kubernetes/manifests/etcd.yaml |grep ETCDCTL_API -A1 |xargs |sed 's/^.//g' |awk '{print $1 }'` ;echo $ETCDCTL_API
—|—
* 获取etcd指令:
1
|
export etcdctl=`cat /etc/kubernetes/manifests/etcd.yaml |grep ETCDCTL_API -A1 |xargs |sed 's/^.//g' |sed 's/ETCDCTL_API=3 /\/tmp\//g'`
—|—
* 备份etcd:(最好/etc/kubernetes目录)
1
|
mkdir /back ; cd /back ; $etcdctl snapshot save snapshot.db
—|—
根据ID删除坏的etcd节点:
1 2
|
$etcdctl member list
$etcdctl member remove <ID>
—|—
删除坏掉的node节点:
1
|
kubectl delete nodes <node>
—|—
使用ake将这个节点重新加回来
1 2
|
ake addnodes
ake join --apiserver 192.168.16.40:6443 --pkg-repo http://192.168.16.40:7000 --registry 192.168.16.40:60080 --debug
—|—
给加入进来的node打上master的标签
1
|
kubectl label no <node> node-role.kubernetes.io/master=
—|—
如果/etc/kubernetes/有备份,以下步骤不需要 将其他节点的/etc/kubernetes/整个目录拷贝过来,并修改/etc/kubernetes/manifests/下yaml文件,将其中的相关的ip换成本机的ip
重新添加etcd节点
1
|
$etcdctl member add 10.0.129.124 --peer-urls=https://10.0.129.124:2380
—|—
重启kubelet
重新签发etcd证书看文档,在执行脚本前添加当前机器的IP ,请看文档k8s 1.13证书升级(包含etcd证书)

- 旧版本k8s可用:
- 把其他 master 节点的 /etc/kubeadm/etcdcfg.yaml 拷贝过来,然后把其中的 ip 信息改成本机的 ip
- 把其他 master 节点的 /etc/kubernetes/pki/etcd/ca.crt 和 /etc/kubernetes/pki/etcd/ca.key 拷贝过来
- 然后使用 kubeadm init phase certs etcd-server etcd-peer apiserver-etcd-client –config /etc/kubeadm/etcdcfg.yaml 生成新的证书
- 最后用 kubeadm init phase etcd local –config /etc/kubeadm/etcdcfg.yaml 生成新的 etcd manifest 就可以了
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.