iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 22

Day22. 備份與還原 backup and restore

  • 分享至 

  • xImage
  •  

凡事不怕一萬,只怕萬一,不管小災害,大災難,有個備份總是可以做補救,備份可以從2個部分下手,資源配置(Resource Configuration)及ECTD

1.資源配置

簡單暴力,取得建立資源所需的yaml檔案,最初建立object的時候,分有命令式(imeperative)及敘述式(declarative),復原時,利用此些配置檔重建objects

  • 敘述式:有較完整的文件紀錄,便於複用或是共用,是較偏好的方式,這些文件能集中存於像是GitHub這類的管理倉庫
  • 命令式:實際上管理時,可能還是有部分直接命令建立的object,因此也需考慮下指令匯出內容做備份的方法,例如:kubectl get all -all-namespace -o yaml > all-deploy-services.yaml,另外也能使用外部解決方案,像是Velero、Stash、Portworx等工具,透過K8s的API將資源悉數匯出

2. ETCD Cluster

儲存有關叢集內的所有object的資訊及各類狀態等,因此可以先考慮備份etcd

備份

  • 備份資料目錄:etcd有個配置是--data-dir=/var/lib/etcd,是data的存放地(目錄),將此目錄及其資料進行備份
  • 透過etcd指令列執行快照(Built-in snapshot)
    • 儲存快照(於當前目錄): ETCDCTL_API=3 etcdctl snapshot save snapshot.db
    • 列出當前目錄的檔案: ls
    • 查看快照檔案狀態: ETCDCTL_API=3 etcdctl snapshot status snapshot.db

復原

當etcd還原時,初始化新的cluster設定,將etcd作為新成員加入,避免加入既存的cluster

復原etcd的大流程

  1. 停用api-server
  2. 還原etcd
  3. 重啟api-server,並建議重啟K8s元件(例如:kube-scheduler, kube-controller-manager, kubelet),確保不依賴到幽靈資料
  • 復原etcd
    ETCDCTL_API=3 etcdctl \
         snapshot restore snapshot.db \ 
         --data-dir /var/lib/etcd-from-backup \ # 設定目錄為先前的備份目錄
         --initial-cluster master-1=https://192.168.5.11:2380,master-2=https://192.168.5.12:2380 \ 
         --initial-cluster-token etcd-cluster-1 \
         --initial-advertise-peer-urls https://${INTERNAL_IP}:2380   
    # 指定驗證
    ETCDCTL_API=3 etcdctl snapshot save snapshot.db
        --endpoints=https://127.0.0.1:2379
        --cacert=/etc/etcd/ca.crt
        --cert=/etc/etcd/etcd server.crt
        --key=/etc/etcd/etcd server.key
    
  • 完成後並修改etcd的data目錄配置,同樣為此備份目錄--data-dir=/var/lib/etcd-from-backup

因為復原作業會重啟etcd,而api-server依賴etcd,因此需執行下面的重新載入指令

  • 重新載入daemon:systemctl daemon-reload
  • 重啟etcd: service etcd restart
  • 最後重啟api-server: service kube-apiserver start
  • 查詢指令:etcdctl snapshot restore -h
    https://ithelp.ithome.com.tw/upload/images/20240826/20168178XOC6Ta4Aep.png

p.s. etcd version: 3.5.x後的版本已棄用etcdctl,改用etcdutl復原


上一篇
Day21. 叢集版本更新
下一篇
Day23. CKA考題練習:備份etcd
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言