有一个k8s单主节点,我需要备份它并在具有不同IP地址的另一台服务器上还原。我在这个主题上进行了搜索,找到了解决方案-https://elastisys.com/2018/12/10/backup-kubernetes-how-and-why/
一切看起来都很轻松;因此,我按照说明进行操作,并获得了证书的副本和etcd数据库的快照。然后,我使用第二个脚本将节点还原到其他服务器上。这次进展不顺利。它给了我很多与证书和服务器的本地IP地址不匹配有关的错误。
据我了解,当kubernetes集群初始化时,它将创建一组分配给原始服务器ip地址的证书,而我不能仅将其备份并还原到其他地方。
那么,如何备份k8s主节点并还原它?
请确保已在kubeadm init命令(--ignore-preflight-errors=DirAvailable--var-lib-etcd
)中添加了一个额外的标志,以确认我们要使用现有的数据。
执行以下步骤:
/etc/kubernetes
中所有配置文件中的IP地址>/etc/kubernetes/pki
/etc/kubernetes/pki
中具有旧IP地址的证书作为替代名称-1st1。
/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。
UPDATE:
在替换主节点并更改IP期间,您无法在步骤4中与api服务器联系以更改configmap。此外,如果您有单个主k8s,则由于新的主节点将启动,工作节点之间的群集连接将被中断。
为了确保在替换主节点期间主节点和工作节点之间的连接,您必须创建HA cluster。
[api-server证书已为主机名kubernetes签名,因此您可以将其作为别名添加到/etc/hosts
中的新IP地址,然后执行k ubectl --server=https://kubernetes:6443 ....
。