导语:k8s是单节点单master的机器,且k8s api使用虚拟ip100.100.100.100。仅适用(使用虚拟IP 100.100.100.100为api通讯的ip) 的单机k8s,以供参考。
A为使用中的机器,B为纯净的机器
2台机器安装etcdctl。被恢复的机器B上安装好k8s。
提前同步好docker文件夹以及数据文件到指定路径。
源机器A执行命令备份etcd
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --cacert=/etc/kubernetes/pki/etcd/ca.crt snapshot save /srv/snap.db
rsync -avP /srv/snap.db 192.168.10.84:/srv/
新机器B上执行恢复
cp -r /var/lib/etcd /var/lib/etcd_bak
rm -fr /var/lib/etcd/*
ETCDCTL_API=3 etcdctl snapshot restore /srv/snap.db --data-dir=/var/lib/etcd
# 重启一下服务器
reboot
常规ip恢复可参考
https://blog.csdn.net/zfw_666666/article/details/126892220
先修改/etc/hosts
解析。将对应ip替换
备份 kubernetes 目录
cp -r /etc/kubernetes{,-bak}
查看证书内的 ip
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'Address';done
生成集群配置(需更换api ip)
kubeadm config view > /root/kubeadm.yaml
# 获取当时创建k8s集群的kubeadm.yaml(kubeadm-config.yaml)
# 如果有对应cm kubeadm-config 也可以查看并获取
# kubectl get cm -o yaml -n kube-system kubeadm-config
删除原有的证书
rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*}
rm -rf /etc/kubernetes/pki/etcd/{healthcheck*,peer*,server*}
重新生成证书
kubeadm init phase certs all --config /root/kubeadm.yaml
# kubeadm init phase certs all --config /data1/new-terra-scripts/base/config/kubeadm/kubeadm-config.yaml
再次查看证书内的 ip
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'Address';done
将配置更新到 configmap 中
kubeadm init phase upload-config kubeadm --config kubeadm.yaml
# kubeadm init phase upload-config kubeadm --config /data1/new-terra-scripts/base/config/kubeadm/kubeadm-config.yaml
node节点IP更换,证书会自动重新签发