Kubernetes etcd 備份補充(Part II)

繼上次升級1.22後做etcd備份失敗後,這次將API-Server停下再做一次

ZONGRU Li
Dec 28, 2021

考量到API-Server運行中也可能影響到etcd的實體檔案再打包備份有問題

這次將API-Server停下再來做整個動作

執行方式將是把static Pod的API-Server yaml檔案備份後移除

需要的幾個指令先整理起來

首先當失去API-Server,我們就沒辦法再用kubectl指令

所以要改用continerd指令來看容器狀態:

sudo ctr --namespace k8s.io task ls

準備重新備份當下etcd檔案打包的指令(檔名改成後面122-1228(指1.22版12/28日做)):

sudo ETCDCTL_API=3 etcdctl snapshot save \
/tmp/etcd-backup-122-1228.db \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key

依樣確認打包的備份檔狀態:

sudo ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup-122-1228.db --write-out=table

接著將打包後的備份檔,再次還原成目錄檔案給etcd可以使用的狀態:

sudo ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup-122-1228.db --data-dir /var/lib/etcd1221228backup

這時候編輯etcd的yaml檔案,修改實際要參照檔案路徑:

sudo vi /etc/kubernetes/manifests/etcd.yaml

然後才將API-Server還原(i.e.賦歸API-Server的yaml檔)

實際執行:

首先確認當前API-Server的Container名稱:

kubectl describe pod {API-Server的pod} -n kube-system

會看到:

對照到containerD的查看container指令:

接著移除/etc/kubernetes/manifests/kube-apiserver.yaml

(這邊我嘗試用mv就好,改個檔名,讓kubelet吃不到就行!)

sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.bak
改名,讓kubelet吃不到yaml

理論上API-Server就掛了,kubectl指令無法運作:

看起來無效,所以我就改做rm:

確認kubectl 指令也失效了

這時候再透過containerD指令確認API-ServerContainer:

這時候跟前一張圖對照,確認API-Server的容器已經消失

執行etcd的備份打包:

打包成功

確認打包的檔案狀態:

還原:

上圖看起來還是會出現sha256的錯誤

所以指令要另外改為:

sudo ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup-122-1228.db --data-dir /var/lib/etcd1221228backup --skip-hash-check=true

接著將etcd指過去新的檔案目錄去:

儲存!

接著重建API-Server(把備份的API-Server yaml檔放回去原來的地方):

過了許久還是像下面這樣....

看了看ps -ef有時候會看到api-server有起來,然後就消失...

接著還原etcd去吃原本的目錄檔案:

隔了幾分鐘後才能正常使用kubectl指令:

結論有無API-Server在,etcd備份都失敗...

暫時無解了...猜測有問題的可能是etcd的指令工具之類的

(以下次日補充)

經大大提醒可以檢查一下備份檔還原出來的目錄權限是否跟既有的一樣:

看權限沒甚麼差,但是檔案數量有不一樣,很神奇...

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet