Kubernetes CKA課程筆記 66

ETCD Backup & Restore — Backing up etcd store

ZONGRU Li
7 min readNov 25, 2021

接著就要來做最重要的etcd store備份,過程則需要使用到etcd store工具 — etcdctl

透過etcdctl(i.e. etcd command line tool)來與etcd server溝通

其中裡面有包含備份etcd store的指令

所以這邊現在要做的就是:

  1. master node上安裝etcdctl
  2. 使用etcdctl建立etcd store的備份

安裝etcdctl:

首先嘗試執行etcdctl如下:

透過提示的安裝指令,我們選用sudo apt安裝,執行如下:

sudo apt install etcd-client

順利安裝完畢!

接著再次執行etcdctl會看到指令提示:

正常安裝執行etcdctl後看到的提示畫面

備份etcd store:

首先來到K8s官網doc解說:

link

細節過程可以看看上述官網doc內容

但是會發現執行各種指令都需要指定etcdctlAPI版本

(也就是與Server溝通的API版本):

所以先複製這部分:

接著要做備份要帶入"snapshot"(意指備份當下的etcd store):

後面著要帶save,並指定要保存的路徑(副檔名用db):

指令目前如下:

ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db

此時這個指令執行一定會有問題,因為etcdctlclient tool

在嚴格的機制控管下etcd server的service不會隨意開放呼叫:

失敗!

這時候需要的是相關的憑證才有權限執行上述指令

有幾個參考點其實可以看看,一個是API Server怎麼跟etcd(Server)溝通的

可以查看API ServerConfiguration yaml檔,執行:

sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml

看到憑證相關檔案

當然也可以確認etcd本身的yaml檔,執行:

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

不管是用etcd本身三個憑證相關檔,或剛剛apiserveretcd溝通的憑證

都可以做到與etcd server溝通,這邊選用etcd本身的三個憑證

這邊先把他grep出來,執行:

sudo cat /etc/kubernetes/manifests/etcd.yaml |grep /etc/kubernetes/pki/

這樣方便組出備份etcd store用的指令

以下組出要用來備份etcd store實際指令,並帶入必要的三個憑證相關檔:

實際組合備份etcd store指令如下:

ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.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 save /tmp/etcd-backup.db  \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key
看起來還是錯!過程會有備份檔名的.part無權限的錯誤!

我後來發現備份的檔名無法接受中間有desh…,所以在改為:

sudo ETCDCTL_API=3 etcdctl snapshot save /tmp/etcdbackup.db  \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key
成功建立etcd store備份,但是檔名改為/tmp/etcdbackup.db

不過講師講解過程則是可以有desh…(怪怪的)

總之:

有備份成功了!!

接著還可以透過etcdctl指令來確認這個etcd store備份的狀態,執行:

sudo ETCDCTL_API=3 etcdctl snapshot status /tmp/etcdbackup.db

如上可以發現不用再帶憑證了,因為這只是一個本地端檔案罷了

現在不是跟etcd Server請求

接著還可以美化顯示,改執行:

sudo ETCDCTL_API=3 etcdctl snapshot status /tmp/etcdbackup.db --write-out=table

此時就完成部分備份工作了

再來可以考慮這個備份檔該如何安全儲放/是否加密..等等

最後講師強調:

  • 關於前面備份時所帶的憑證
  • 由於我們直接再master上執行備份指令
  • 理所當然地可以隨意使用那三個憑證檔(由當初kubeadm init產出的)
  • 若哪一天需要由該機台外,也就是在別的機台來執行這個指令
  • 就得記得複製一份這些憑證檔去用

然後我自己筆記:可能還要帶etcd server位置:

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet