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

问题描述 投票:0回答:1

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

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

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

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

kubernetes backup restore
1个回答
0
投票

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

执行以下步骤:

  • 替换/etc/kubernetes中所有配置文件中的IP地址>
  • 备份/etc/kubernetes/pki
  • 标识/etc/kubernetes/pki中具有旧IP地址的证书作为替代名称-1st
  • 步骤
  • 分别删除它们的证书和密钥(对我来说,这只是apiserver和etcd / peer)
  • 使用kubeadm alpha阶段证书重新生成证书-2nd
  • 步骤
  • 在引用的kube系统名称空间中标识configmap旧的IP-3rd
  • 步骤
  • 手动编辑那些配置图
  • 重新启动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

UPDATE:

在替换主节点并更改IP期间,您无法在步骤4中与api服务器联系以更改configmap。此外,如果您有单个主k8s,则由于新的主节点将启动,工作节点之间的群集连接将被中断。

为了确保在替换主节点期间主节点和工作节点之间的连接,您必须创建HA cluster

[api-server证书已为主机名kubernetes签名,因此您可以将其作为别名添加到/etc/hosts中的新IP地址,然后执行k ubectl --server=https://kubernetes:6443 ....

© www.soinside.com 2019 - 2024. All rights reserved.