簡體   English   中英

如何備份和恢復 kubernetes 主節點?

[英]How to backup and restore a kubernetes master node?

有一個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地址作為ALT名-第1
  • 刪除他們每個人的證書和密鑰(對我來說它只是 apiserver 和 etcd/peer)
  • 使用 kubeadm alpha 階段證書重新生成證書 -第 2
  • 在引用舊 IP 的 kube-system 命名空間中識別 configmap -第三
  • 手動編輯這些配置映射
  • 重啟 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 期間,您無法聯系 api-server 來更改步驟 4 中的配置映射。此外,如果您有單個主節點,則工作節點之間的 k8s 集群連接將被中斷,直到新主節點啟動。

為了確保在更換主節點期間主節點和工作節點之間的連接,您必須創建HA 集群

該證書是為 {your-old-IP-here} 簽名的,因此 {your-new-ip-here} 無法進行安全通信

您可以事先在證書中添加更多 IP...

api-server 證書是為主機名 kubernetes 簽名的,因此您可以將其作為別名添加到/etc/hosts的新 IP 地址,然后執行 k ubectl --server=https://kubernetes:6443 ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM