RKE 集群備份和恢復


概述

v0.1.7 或以上版本可用

RKE 集群可以自動備份 etcd 節點的快照。在災難場景下,您可以使用這些快照恢復集群。RKE 將快照保存本地/opt/rke/etcd-snapshots路徑下。

v0.2.0 或以上版本可用

RKE 可將集群快照上傳至 AWS S3 適配的后端機器。

說明:RKE v0.2.0 改變了存儲集群狀態的方式,所以pki.bundle.tar.gz不再是必須的文件。

備份集群

您可以手動創建集群備份,或為集群創建定時快照。

創建一次性快照

RKE v0.2.0 或以上的版本

打開命令行工具,輸入rke etcd snapshot-save命令,運行后即可保存 cluster config 文件內每個 etcd 節點的快照。RKE 會將節點快照保存在/opt/rke/etcd-snapshots路徑下。運行上述命令時,RKE 會創建一個用於備份快照的容器。完成備份后,RKE 會刪除該容器。

  1. 首先,運行以下命令,在本地創建一個一次性快照:
rke etcd snapshot-save --config cluster.yml --name snapshot-name

結果: 創建了一個快照,保存在 /opt/rke/etcd-snapshots路徑下。

  1. 然后,你可以進一步把上述快照文件保存到遠端存儲,以便災難恢復。

創建定時快照

RKE v0.2.0 或以上的版本

您可以啟用etcd-snapshot服務,使用相關的配置參數,開啟定時備份 etcd 節點快照功能。

etcd-snapshot在etcd容器之外的服務容器中運行。默認設置下,etcd-snapshot服務會為每一個具有etcd角色的節點創建快照,然后將這些快照儲存在本地的/opt/rke/etcd-snapshots路徑下。

快照服務日志

運行已經啟用etcd-snapshot的集群時,您可以在命令行工具中輸入docker logs etcd-rolling-snapshots,查看etcd-rolling-snapshots日志,確認集群是否已開啟定時快照功能。如果集群已經開啟定時快照功能,輸入該命令后,返回的消息包含了每個快照的創建時間、創建信息、名稱和運行時間,與下方代碼示例相似。

docker logs etcd-rolling-snapshots

time="2018-05-04T18:39:16Z" level=info msg="Initializing Rolling Backups" creation=1m0s retention=24h0m0s
time="2018-05-04T18:40:16Z" level=info msg="Created backup" name="2018-05-04T18:40:16Z_etcd" runtime=108.332814ms
time="2018-05-04T18:41:16Z" level=info msg="Created backup" name="2018-05-04T18:41:16Z_etcd" runtime=92.880112ms
time="2018-05-04T18:42:16Z" level=info msg="Created backup" name="2018-05-04T18:42:16Z_etcd" runtime=83.67642ms
time="2018-05-04T18:43:16Z" level=info msg="Created backup" name="2018-05-04T18:43:16Z_etcd" runtime=86.298499ms

Etcd-Snapshot 服務的可配置參數

創建定時快照時,可配置的主要參數如下表所示。

配置快照服務的 YAML 示例

services:
  etcd:
    backup_config:
      interval_hours: 12 # 創建快照的間隔時間,單位是小時,12表示每12個小時創建一個快照
      retention: 6 # 快照的存活時間,單位是小時

恢復集群

您可以使用 RKE 備份的集群快照恢復集群。

RKE v0.2.0 或以上的版本

如果您的 Kubernetes 集群發生了災難,您可以使用rke etcd snapshot-restore來恢復您的 etcd。這個命令可以將 etcd 恢復到特定的快照,應該在遭受災難的特定集群的 etcd 節點上運行。

當您運行該命令時,將執行以下操作。

  • 同步快照
  • 跨 etcd 節點檢查快照校驗和,確保它們是相同的。
  • 通過運行rke remove刪除您當前的集群並清理舊數據。這將刪除整個 Kubernetes 集群,而不僅僅是 etcd 集群。
  • 從選擇的快照重建 etcd 集群
  • 通過運行rke up創建一個新的集群
  • 重新啟動集群系統 pod。

警告:在運行rke etcd snapshot-restore之前,您應該備份集群中的任何重要數據,因為該命令會刪除您當前的 Kubernetes 集群,並用新的集群替換。

用於恢復 etcd 集群的快照可以存儲在本地的/opt/rke/etcd-snapshots中,也可以存儲在遠端存儲。

從本地快照恢復的示例

請運行以下命令,從本地快照中還原 etcd:

rke etcd snapshot-restore --config cluster.yml --name mysnapshot

假設快照位於/opt/rke/etcd-snapshots中。

注意:不需要pki.bundle.tar.gz文件,因為 RKE v0.2.0 改變了Kubernetes 集群狀態的存儲方式。

示例場景

示例場景使用的是部署在兩個 AWS 節點上的 Kubernetes 集群:node1 和node2。我們會模擬node2失效的場景,創建一個新的節點node3並將node2的快照備份遷移到node3。節點的詳細信息如下表所示:

RKE v0.2.0 或更新的版本

概述

使用 RKE v0.2.0 或更新的版本進行備份和恢復集群的操作指導,分為以下五個步驟:

  1. 備份集群
  2. 模擬節點 failure
  3. 新建 etcd 節點
  4. 使用備份恢復新建節點的數據
  5. 確認恢復后的集群處於正常狀態

備份集群

運行以下命令,備份集群。

rke etcd snapshot-save --name snapshot.db --config cluster.yml

模擬節點失效的場景

運行以下命令,關閉node2,模擬節點失效的場景。運行命令后,node2的狀態變更為不可用:

root@node2:~# poweroff

新建 etcd 節點

升級和恢復 etcd 節點之前,您需要將新建的節點添加到 Kubernetes 集群內,並為其分配etcd角色。請打開cluster.yml文件,將node2相關的參數變更為注釋,然后添加新節點node3的參數,如下所示。

nodes:
  - address: 10.0.0.1
    hostname_override: node1
    user: ubuntu
    role:
      - controlplane
      - worker
  #    - address: 10.0.0.2
  #      hostname_override: node2
  #      user: ubuntu
  #      role:
  #       - etcd
  - address: 10.0.0.3
    hostname_override: node3
    user: ubuntu
    role:
      - etcd

使用備份恢復新建節點的數據

先決條件:開始恢復節點前,請確保您的cluster.rkestate文件有效,因為該文件包含了集群所需的證書數據。

將新建的節點添加到cluster.yml中后,運行 rke etcd snapshot-restore命令,從備份中啟動etcd:

rke etcd snapshot-restore --name snapshot.db --config cluster.yml

默認配置下,RKE 將快照保存在/opt/rke/etcd-snapshots路徑。

說明:從 v0.2.0 開始,恢復集群所需的證書信息存儲在cluster.rkestate中,所以pki.bundle.tar.gz不再是恢復集群時的必備文件。

確認恢復后的集群處於正常狀態

rke etcd snapshot-restore命令觸發了使用新的cluster.yml運行rke up命令。請運行kubectl get pods確認您的 Kubernetes 集群處於正常狀態。如果狀態正常,返回的信息應該與以下代碼示例相似:

> kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-65899c769f-kcdpr   1/1       Running   0          17s
nginx-65899c769f-pc45c   1/1       Running   0          17s
nginx-65899c769f-qkhml   1/1       Running   0          17s

問題排查

從 RKEv0.1.9開始,不論恢復節點的結果是成功還是失敗,rke-bundle-cert容器都會被移除,無法依據完成恢復節點的流程以后,rke-bundle-cert容器是否依然存在,來確認恢復節點成功或失敗。您需要查看 RKE 的日志排查問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM