k8s 集群災難恢復


環境准備:

192.168.244.11  k8s-company01-master01
192.168.244.12  k8s-company01-master02
192.168.244.13  k8s-company01-master03
192.168.244.15  k8s-company01-lb
192.168.244.14  k8s-company01-worker001

三台 master 宕掉兩台或三台

在宕掉兩台或三台 master 后集群已宕掉,worker 節點中的 pod 可以正常運行,這里考慮機器可以正常修復,並能正常啟動。

這里模擬測試:

  • 停掉 192.168.244.12,192.168.244.13 兩台 master 機器
  • 讓 192.168.244.11 上的 etcd 正常工作
  • 待 192.168.244.12,192.168.244.13 啟動后,恢復整個集群

停掉 12 和 13 機器,使集群無法工作

在關閉之前集群是正常的:

[root@k8s-company01-master01 ~]# kubectl get nodes
NAME                      STATUS   ROLES    AGE     VERSION
k8s-company01-master01    Ready    master   11m     v1.14.1
k8s-company01-master02    Ready    master   9m23s   v1.14.1
k8s-company01-master03    Ready    master   7m10s   v1.14.1
k8s-company01-worker001   Ready    <none>   13s     v1.14.1

關閉之后:

[root@k8s-company01-master01 ~]# kubectl get nodes
Unable to connect to the server: unexpected EOF

集群無法正常工作,etcd 也無法使用。

使 11 節點上的 etcd 以單節點集群的形式啟動

集群中 etcd 讀取的配置是 /etc/kubernetes/manifests/etcd.yaml 中的。
在其中添加兩條命令,使其變成單節點集群的形式:

- command:
    - etcd
    - --advertise-client-urls=https://192.168.244.11:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://192.168.244.11:2380
    - --initial-cluster=k8s-company01-master01=https://192.168.244.11:2380
    - --initial-cluster-state=new      ##新加 1
    - --force-new-cluster              ##新加 2
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379,https://192.168.244.11:2379
    - --listen-peer-urls=https://192.168.244.11:2380
    - --name=k8s-company01-master01
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

etcd 集群此時只有一個節點。而且有的 pod 是無法正常運行的,etcd 的另外兩個節點都處於 CrashLoopBackOff 狀態。

恢復 etcd 集群,使整個 k8s 集群恢復正常

啟動 12 和 13 服務器。

在 11 服務器上添加 12 和 13 的 etcd 節點,使其組成一個集群,在添加之前,要先清掉 12 和 13 上 etcd 的數據:

cd /var/lib/etcd
rm -rf member/

添加 12 節點 (添加節點的操作,均在 11 上執行 ):

[root@k8s-company01-master01 ~]# ETCDCTL_API=3 etcdctl member add etcd-k8s-company01-master02 --peer-urls="https://192.168.244.12:2380" --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --cacert=/etc/kubernetes/pki/etcd/ca.crt
Member 9ada83de146cad81 added to cluster 7b96e402e17890a5

輸出上面的內容,表示添加成功,此時還需要重啟 12 的 kubelet 服務。

systemctl restart kubelet.service

集群已變成兩個節點的。

繼續添加 13 節點 (添加后重啟 13 的 kubelet 服務):

[root@k8s-company01-master01 ~]# ETCDCTL_API=3 etcdctl member add etcd-k8s-company01-master03 --peer-urls="https://192.168.244.13:2380" --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --cacert=/etc/kubernetes/pki/etcd/ca.crt
Member efa2b7e4c407fb7a added to cluster 7b96e402e17890a5

etcd 集群已恢復正常。

集群恢復正常:

[root@k8s-company01-master01 ~]#  kubectl get node
NAME                      STATUS   ROLES    AGE   VERSION
k8s-company01-master01    Ready    master   33m   v1.14.1
k8s-company01-master02    Ready    master   31m   v1.14.1
k8s-company01-master03    Ready    master   29m   v1.14.1
k8s-company01-worker001   Ready    <none>   22m   v1.14.1

如有出現節點添加成功,但 etcd 集群仍為宕掉的狀態,可以稍等,11 節點會自動將添加失敗的節點踢出,然后重復添加即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM