有一个k8s单主节点,我需要备份它并在具有不同IP地址的其他服务器上还原。我在这个主题上进行了搜索,找到了解决方案- https://elastisys.com/2018/12/10/backup-kubernetes-how-and-why/
一切看起来都很轻松;因此,我按照说明进行操作,并获得了证书的副本和etcd数据库的快照。然后,我使用第二个脚本将节点还原到其他服务器上。这次进展不顺利。它给了我很多与证书和服务器的本地IP地址不匹配有关的错误。
据我了解,当kubernetes集群初始化时,它会创建一组分配给原始服务器ip地址的证书,而我不能仅将其备份并还原到其他地方。
那么,如何备份k8s主节点并还原它?
答案 0 :(得分:1)
确保您已在kubeadm init命令(--ignore-preflight-errors=DirAvailable--var-lib-etcd
)中添加了一个额外的标志,以确认我们要使用现有数据。
执行以下步骤:
/etc/kubernetes
的所有配置文件中替换IP地址/etc/kubernetes/pki
/etc/kubernetes/pki
中具有旧IP地址的证书
作为替代名称-第一步步骤1。
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done
/etc/kubernetes/pki# grep -Rl 12\\.34\\.56\\.78 .
./apiserver.crt.txt
./etcd/peer.crt.txt
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do rm $f.txt; done
2。
/etc/kubernetes/pki# rm apiserver.crt apiserver.key
/etc/kubernetes/pki# kubeadm alpha phase certs apiserver
...
/etc/kubernetes/pki# rm etcd/peer.crt etcd/peer.key
/etc/kubernetes/pki# kubeadm alpha phase certs etcd-peer
... 3。
$ kubectl -n kube-system get cm -o yaml | less
...
$ kubectl -n kube-system edit cm ...
在这里看看:master-backup。
更新:
在替换主节点和更改IP的过程中,您无法在步骤4中联系api服务器来更改configmap。此外,如果您有单个主k8s,则工作节点之间的群集连接将被中断,直到新的主节点启动为止。
要确保在替换主节点期间主节点和工作节点之间的连接,您必须创建HA cluster。
该证书已在{your-old-ip-here}上签名,因此无法在{your-new-ip-here}进行安全通信
您可以预先在证书中添加更多IP ...
api-server证书是为主机名kubernetes签名的,因此您可以将其作为别名添加到/etc/hosts
中的新IP地址,然后执行k ubectl --server=https://kubernetes:6443 ....
。