Kubernetes 集羣的狀態保存在 etcd 數據存儲區中。本頁展現瞭如何對標準 Kubernetes 發行版中的 etcd 進行備份和恢復。至於一些一般保存在持久捲上的應用數據備份並不在此文檔進行說明。html
本頁面假設您有一個 Juju 部署的集羣。git
etcd 的 snapshot 操做可以讓操做員給正在運行的集羣數據創建快照,快照數據可用於複製、備份或者遷移到一個新的集羣。github
juju run-action etcd/0 snapshot target=/mnt/etcd-backups
etcd 可以經過 restore 操做從一個集羣數據快照中恢復集羣數據。這裏有一個注意事項:集羣必須只能有一個 member,而且須要指定一個具體的目錄來恢復集羣數據。因此最好可以使用 etcd charm 來部署一個新的集羣,而且不要添加任何額外的單元。ubuntu
juju deploy etcd new-etcd
上面這段代碼將會部署一個單獨的 etcd 單元,稱爲 ‘new-etcd’。ide
juju run-action etcd/0 restore target=/mnt/etcd-backups
當恢復操做完成後,您應評估一下集羣的健康狀態。若是集羣運行良好,就能夠按照您的需求來擴展應用程序規模。ui
經過使用上述的 snapshot 和 restore 操做,就能很容易地遷移 etcd 集羣。spa
第一步: 給現有的集羣創建快照。這個已經封裝在 snapshot 操做中。3d
juju run-action etcd/0 snapshot
結果:rest
Action queued with id: b46d5d6f-5625-4320-8cda-b611c6ae580c
第二步: 檢查操做狀態,以便您能抓取快照而且驗證 sum。您能夠直接使用 copy.cmd 中的結果來下載您剛剛建立的快照數據,copy.cmd 中的結果能夠直接複製/粘貼使用。htm
從節點上下載剛剛建立的快照數據而且驗證 sha256 sum
juju show-action-output b46d5d6f-5625-4320-8cda-b611c6ae580c
結果:
results: copy: cmd: juju scp etcd/0:/home/ubuntu/etcd-snapshots/etcd-snapshot-2016-11-09-02.41.47.tar.gz . snapshot: path: /home/ubuntu/etcd-snapshots/etcd-snapshot-2016-11-09-02.41.47.tar.gz sha256: 1dea04627812397c51ee87e313433f3102f617a9cab1d1b79698323f6459953d size: 68K status: completed
拷貝快照數據到本地磁盤而且檢查 sha256sum。
juju scp etcd/0:/home/ubuntu/etcd-snapshots/etcd-snapshot-2016-11-09-02.41.47.tar.gz . sha256sum etcd-snapshot-2016-11-09-02.41.47.tar.gz
第三步: 使用快照數據部署一個新的集羣 leader:
juju deploy etcd new-etcd --resource snapshot=./etcd-snapshot-2016-11-09-02.41.47.tar.gz
第四步: 使用在第三步中的快照數據來從新初始化 master:
juju run-action new-etcd/0 restore
若是您損壞了 leader - 經過 status 中緊接着 unit number 的 * 號來標識,那麼全部的 TLS pki 將會丟失。對於須要請求和註冊證書的 unit 將不會有 PKI 遷移。
警告: 若是該項配置缺失那麼您將沒法從外部訪問集羣,而且極可能會使得現有的 deployment 出現 x509 證書驗證相關的奇怪問題,這些都會對服務端和客戶端形成影響。
在一個擴展集羣上恢復數據將會致使集羣損壞。Etcd 在 unit 啓動時開始管理集羣,而且將狀態保存在 Etcd 中。在恢復快照數據時,etcd 將會初始化一個新的集羣 ID,而且丟棄其它 peer 節點以保證快照數據的恢復。請嚴格遵守上述集羣遷移中的恢復操做來進行操做。
譯者:tianshapjq / 原文連接