iT邦幫忙

2022 iThome 鐵人賽

DAY 16
1
DevOps

30天準備CKA考試系列 第 16

Day 16:ETCD與集群的備份與還原

  • 分享至 

  • xImage
  •  

Day 03有提到,ETCD是一種Key-Value型態的資料庫,用來保存Kubernetes集群中的各種數據。而當災難發生時,使用ETCD的備份來復原是很重要的。

集群物件的備份與還原

Kubernetes本身集群內Object的備份方式有兩種:

  • 儲存YAML檔:將集群目前的所有Object之設定備份成YAML檔。當發生問題需要找回這些數據時,再使用此YAML檔來還原。

    # 於Master Node將所有物件之設定存成YAML檔
    kubectl get all -A > all-of-cluster-objects.yaml
    
    # 於Master Node使用該YAML檔還原物件
    kubectl apply -f all-of-cluster-objects.yaml
    

    如果希望只還原部分的Object。只要在此YAML中擷取這些Object的部分,並建立新的的YAML,再用新的YAML還原就可以了。

  • 將ETCD集群使用etcdctl備份成快照檔:若發生問題需要還原時,再將快照檔還原。

    # 於Master Node取得etcdctl,但必須先安裝golang,如果有缺再做。
    go get github.com/coreos/etcd/etcdctl
    
    # 因為ETCD是Static Pods,所以可以在Master Node的/etc/kubernetes/manifests/資料夾中找到必要之參數
    cat /etc/kubernetes/manifests/etcd.yaml
    
    # 也可以直接查看ETCD Pod的設定來取得參數,$etcdPodName可代換成自己的ETCD Pod名稱
    kubectl get pod -n kube-system $etcdPodName -o yaml
    # 或是
    kubectl describe pod -n kube-system $etcdPodName
    
    # 取得advertise-client-urls, cert-file, key-file
    # $masterNodeIp為自己的Master Node的IP
    - --advertise-client-urls=https://$masterNodeIp:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    
    # 於Master Node對ETCD快照
    # 必須先設置環境變ETCDCTL_API=3來使用etcd v3
    # --endpoints對應--advertise-client-urls
    # --cacert對應--trusted-ca-file
    # --cert對應--cert-file
    # --key對應--key-file
    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
         --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
         snapshot save /tmp/snapshot-pre-boot.db
    
    # 若是覺得每次都要先宣告環境變數很麻煩,也可以使用export來設定環境變數,那之後的etcdctl指令都不需要先設置環境變數告知使用v3了
    export ETCDCTL_API=3
    
    # 將ETCD使用快照還原到指定的位置
    # --data-dir代表要將ETCD還原的位置,這邊選擇/var/lib/etcd-from-backup
    etcdctl --data-dir /var/lib/etcd-from-backup snapshot restore /tmp/snapshot-pre-boot.db
    
    • 修改/etc/kubernetes/manifests/etcd.yaml,將--data-dir所指定的位置替換掉volume etcd-data的path

      volumes:
        - hostPath:
            path: /var/lib/etcd
            type: DirectoryOrCreate
          name: etcd-data
      
      # 改為
      volumes:
        - hostPath:
            path: /var/lib/etcd-from-backup
            type: DirectoryOrCreate
          name: etcd-data
      
    • 觀察ETCD container是否重建完成,但這個指令Docker的指令,須確認考試環境是否支援。

      docker ps | grep etcd
      
      # 若是等候許久,卻依然沒有重建完成,可將kubelet重啟
      systemctl restart kubelet
      

在開始準備CKA考試之前都沒仔細研究要怎麼使用etcd,直到看到考試範圍才發現ETCD的備份與還原這麼重要XD

參考資料

kubernetes-cka-practice-test-solution-etcd-backup-and-restore

为 Kubernetes 运行 etcd 集群


上一篇
Day 15:Cluster Upgrade
下一篇
Day 17:Volume
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
雷N
iT邦研究生 1 級 ‧ 2022-10-01 16:06:17

ETCD , 剛好以前很常用來做一些事情:)
ETCD系列

Calvin iT邦新手 3 級 ‧ 2022-10-02 19:15:07 檢舉

感謝補充

我要留言

立即登入留言