安裝etcdctl:
首先嘗試執行etcdctl如下:
透過提示的安裝指令,我們選用sudo apt安裝,執行如下:
sudo apt install etcd-client
接著再次執行etcdctl會看到指令提示:
備份etcd store:
首先來到K8s官網doc解說:
細節過程可以看看上述官網doc內容
但是會發現執行各種指令都需要指定etcdctl的API版本
(也就是與Server溝通的API版本):
所以先複製這部分:
接著要做備份要帶入"snapshot"(意指備份當下的etcd store):
後面著要帶save,並指定要保存的路徑(副檔名用db):
指令目前如下:
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db
此時這個指令執行一定會有問題,因為etcdctl是client tool
在嚴格的機制控管下etcd server的service不會隨意開放呼叫:
這時候需要的是相關的憑證才有權限執行上述指令
有幾個參考點其實可以看看,一個是API Server怎麼跟etcd(Server)溝通的
可以查看API Server的Configuration yaml檔,執行:
sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml
當然也可以確認etcd本身的yaml檔,執行:
sudo cat /etc/kubernetes/manifests/etcd.yaml
不管是用etcd本身三個憑證相關檔,或剛剛apiserver與etcd溝通的憑證
都可以做到與etcd server溝通,這邊選用etcd本身的三個憑證
這邊先把他grep出來,執行:
sudo cat /etc/kubernetes/manifests/etcd.yaml |grep /etc/kubernetes/pki/
以下組出要用來備份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
我後來發現備份的檔名無法接受中間有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
不過講師講解過程則是可以有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位置: