如何备份和还原kubernetes主节点?

时间:2020-01-26 22:16:40

标签: kubernetes backup restore

有一个k8s单主节点,我需要备份它并在具有不同IP地址的其他服务器上还原。我在这个主题上进行了搜索,找到了解决方案- https://elastisys.com/2018/12/10/backup-kubernetes-how-and-why/

一切看起来都很轻松;因此,我按照说明进行操作,并获得了证书的副本和etcd数据库的快照。然后,我使用第二个脚本将节点还原到其他服务器上。这次进展不顺利。它给了我很多与证书和服务器的本地IP地址不匹配有关的错误。

据我了解,当kubernetes集群初始化时,它会创建一组分配给原始服务器ip地址的证书,而我不能仅将其备份并还原到其他地方。

那么,如何备份k8s主节点并还原它?

1 个答案:

答案 0 :(得分:1)

确保您已在kubeadm init命令(--ignore-preflight-errors=DirAvailable--var-lib-etcd)中添加了一个额外的标志,以确认我们要使用现有数据。

执行以下步骤:

  • /etc/kubernetes的所有配置文件中替换IP地址
  • 备份/etc/kubernetes/pki
  • 标识/etc/kubernetes/pki中具有旧IP地址的证书 作为替代名称-第一步步骤
  • 删除它们各自的证书和密钥(对我而言,这只是 apiserver和etcd / peer)
  • 使用kubeadm alpha阶段证书重新生成证书-第二步步骤
  • 在引用的kube-system命名空间中标识configmap 旧的IP-第三步步骤
  • 手动编辑这些配置图
  • 重新启动kubelet和docker(强制将所有容器 重新创建)

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 ....

相关问题