備份叢集
在 Rancher UI 中,可以輕鬆執行 Rancher 啟動的 Kubernetes 叢集的 etcd 備份和復原。
Rancher 建議為所有正式環境叢集設定循環 etcd 快照。此外,也可以建立一次性快照。
etcd 資料庫的快照會被擷取並儲存至 etcd 節點本機或 S3 相容目標。設定 S3 的優點是,如果所有 etcd 節點都遺失,你的快照會遠端儲存,並可用於還原叢集。
快照的運作方式
快照元件
- RKE
- RKE2/K3s
當 Rancher 建立快照時,它包含三個元件:
- etcd 中的叢集資料
- Kubernetes 版本
cluster.yml形式的叢集設定
由於快照現在包含了 Kubernetes 版本,因此可以將叢集還原到先前的 Kubernetes 版本。
Rancher 將快照建立委派給下游 Kubernetes 引擎。當 Kubernetes 引擎建立快照時,它包含三個元件:
- etcd 中的叢集資料
- Kubernetes 版本
- 叢集設定
由於快照包含了 Kubernetes 版本,因此在還原 etcd 快照時,也可以將叢集還原到先前的 Kubernetes 版本。
快照的多個元件讓你在需要從快照還原叢集時可以選擇以下選項:
- 僅還原 etcd 內容: 此還原方式類似於 Rancher v2.4.0 之前版本的快照還原。
- 還原 etcd 和 Kubernetes 版本: 如果 Kubernetes 升級是導致叢集故障的原因,且你未進行任何叢集設定變更,應使用此選項。
- 還原 etcd、Kubernetes 版本和叢集設定: 如果你在升級時同時變更了 Kubernetes 版本和叢集設定,應使用此選項。
始終建議在執行任何設定變更或升級之前建立新快照。
從 etcd 節點產生快照
- RKE
- RKE2/K3s
對於叢集中的每個 etcd 節點,系統會檢查 etcd 叢集的健康狀態。如果節點回報 etcd 叢集健康,則會從該節點建立快照,並可選擇性地上傳到 S3。
快照會儲存在 /opt/rke/etcd-snapshots 中。如果該目錄在節點上設定為共享掛載,它將被覆寫。在 S3 上,快照將始終來自最後上傳的節點,因為所有 etcd 節點都會上傳它,而最後上傳的將被保留。
當存在多個 etcd 節點時,任何建立的快照都會在叢集健康檢查後建立,因此可以被視為 etcd 叢集資料的有效快照。
快照預設為啟用狀態。
快照目錄預設為 /var/lib/rancher/<RUNTIME>/server/db/snapshots,其中 <RUNTIME> 為 rke2 或 k3s。
在 RKE2 中,快照儲存在每個 etcd 節點上。如果你有多個 etcd 或 etcd + control-plane 節點,你將擁有多個本機 etcd 快照的副本。
快照命名慣例
- RKE
- RKE2/K3s
快照名稱是自動產生的。使用 RKE CLI 建立一次性快照時,可以使用 --name 選項來覆寫快照的名稱。
當 Rancher 為 RKE 叢集建立快照時,快照名稱基於類型(快照是手動還是循環)和目標(快照是儲存在本機還是上傳到 S3)。命名慣例如下:
m代表手動 (manual)r代表循環 (recurring)l代表本機 (local)s代表 S3
一些快照名稱範例:
- c-9dmxz-rl-8b2cx
- c-9dmxz-ml-kr56m
- c-9dmxz-ms-t6bjb
- c-9dmxz-rs-8gxc8
快照名稱是自動產生的。使用 RKE2 或 K3s CLI 建立一次性快照時,可以使用 --name 選項來覆寫快照的基本名稱。
當 Rancher 為 RKE2 或 K3s 叢集建立快照時,快照名稱基於類型(快照是手動還是循環)和目標(快照是儲存在本機還是上傳到 S3)。命名慣例如下:
<name>-<node>-<timestamp>
<name>:由 --name 設定的基本名稱,可以是以下之一
etcd-snapshot為循環快照的前綴on-demand為手動、隨選快照的前綴
<node>:節點是建立快照的節點名稱。
<timestamp> 是快照建立日期的 unix 時間戳記。
一些快照名稱範例:
on-demand-my-super-rancher-k8s-node1-1652288934on-demand-my-super-rancher-k8s-node2-1652288936etcd-snapshot-my-super-rancher-k8s-node1-1652289945etcd-snapshot-my-super-rancher-k8s-node2-1652289948
從快照還原的運作方式
- RKE
- RKE2/K3s
在還原時,使用以下流程:
- 如果已設定 S3,則從 S3 擷取快照。
- 解壓縮快照(如果已壓縮)。
- 叢集中的其中一個 etcd 節點將該快照檔案提供給其他節點。
- 其他 etcd 節點下載快照並驗證校驗和,以確保它們都使用相同的快照進行還原。
- 還原叢集,並在叢集中執行還原後動作。
在還原時,Rancher 會提供幾組計畫來執行還原。使用一組階段,即:
- Started(已開始)
- Shutdown(關閉)
- Restore(還原)
- RestartCluster(重新啟動叢集)
- Finished(已完成)
如果 etcd 快照還原失敗,階段將設定為 Failed(失敗)。
- 收到 etcd 快照還原請求,並根據
restoreRKEConfig,協調叢集設定/Kubernetes 版本。 - 階段設定為
Started。 - 階段設定為
Shutdown,並使用執行發行版killall.sh指令碼的計畫關閉整個叢集。選出一個新的初始節點。如果要還原的快照是本機快照,則會選擇快照所在的節點作為初始節點。如果要從 S3 還原快照,則會使用現有的初始節點。 - 階段設定為
Restore,並將快照還原到初始節點上。 - 階段設定為
RestartCluster,並將叢集重新啟動/ 重新加入到具有最新還原快照資訊的新初始節點。 - 階段設定為
Finished,並認為叢集已成功還原。cattle-cluster-agent將重新連線,叢集將完成協調。
設定循環快照
- RKE
- RKE2/K3s
選擇循環快照的建立頻率以及要保留的快照數量。時間量以小時為單位。使用帶有時間戳記的快照,使用者可以進行時間點復原。
預設情況下,Rancher 啟動的 Kubernetes 叢集設定為建立循環快照(儲存到本機磁碟)。為了防止本機磁碟故障,建議使用 S3 目標或複製磁碟上的路徑。
在叢集佈建或編輯叢集期間,可以在叢集選項的進階區段中找到快照的設定。點擊顯示進階選項。
在進階叢集選項區段中,有幾個可設定的選項:
| 選項 | 說明 | 預設值 |
|---|---|---|
| etcd 快照備份目標 | 選擇你希望快照儲存的位置。選項為本機或 S3 | local |
| 啟用循環 etcd 快照 | 啟用/停用循環快照 | Yes |
| 循環 etcd 快照建立 週期 | 循環快照之間的時間(小時) | 12 hours |
| 循環 etcd 快照保留數量 | 要保留的快照數量 | 6 |
設定循環快照的建立排程以及要保留的快照數量。排程採用傳統 cron 格式。保留政策指定每個節點要保留符合名稱的快照數量。
預設情況下,Rancher 啟動的 Kubernetes 叢集設定為從上午 12 點開始每 5 小時建立一次循環快照(儲存到本機磁碟)。為了防止本機磁碟故障,建議使用 S3 目標或複製磁碟上的路徑。
在叢集佈建或編輯叢集期間,可以在叢集設定下找到快照的設定。點擊 etcd。
| 選項 | 說明 | 預設值 |
|---|---|---|
| 啟用循環 etcd 快照 | 啟用/停用循環快照 | Yes |
| 循環 etcd 快照建立週期 | 循環快照的 Cron 排程 | 0 */5 * * * |
| 循環 etcd 快照保留數量 | 要保留的快照數量 | 5 |
一次性快照
- RKE
- RKE2/K3s
除了循環快照之 外,你可能還想建立「一次性」快照。例如,在升級叢集的 Kubernetes 版本之前,最好備份叢集的狀態以防止升級失敗。
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面上,導覽至你要建立一次性快照的叢集。
- 點擊 ⋮ > 建立快照。
除了循環快照之外,你可能還想建立「一次性」快照。例如,在升級叢集的 Kubernetes 版本之前,最好備份叢集的狀態以防止升級失敗。
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面上,導覽至你要建立一次性快照的叢集。
- 導覽至
Snapshots(快照)標籤並點擊Snapshot Now(立即建立快照)
建立一次性快照的運作方式
在建立一次性快照時,Rancher 會提供幾組計畫來執行快照建立。使用一組階段,即:
- Started(已開始)
- RestartCluster(重新啟動叢集)
- Finished(已完成)
如果 etcd 快照建立失敗,階段將設定為 Failed(失敗)。
- 收到 etcd 快照建立請求。
- 階段設定為
Started。叢集中的所有 etcd 節點都會根據叢集設定收到建立 etcd 快照的計畫。 - 階段設定為
RestartCluster,並將每個 etcd 節點上的計畫重設為 etcd 節點的原始計畫。 - 階段設定為
Finished。
結果: 根據你的快照備份目標,將建立一次性快照並儲存到選定的備份目標。
快照備份目標
Rancher 支援兩種不同的備份目標:
本機備份目標
- RKE
- RKE2/K3s
預設情況下,選擇 local(本機)備份目標。此選項的優點是不需要外部設定。快照會自動儲存到 Rancher 啟動的 Kubernetes 叢集中 etcd 節點的本機 /opt/rke/etcd-snapshots。所有循環快照都會在設定的間隔時間建立。使用 local 備份目標的缺點是,如果發生全面災難且_所有_ etcd 節點都遺失,則無法還原叢集。
預設情況下,選擇 local(本機)備份目標。此選項的優點是不需要外部設定。快照會自動儲存到 Rancher 啟動的 Kubernetes 叢集中 etcd 節點的本機 /var/lib/rancher/<runtime>/server/db/snapshots,其中 <runtime> 為 k3s 或 rke2。所有循環快照都會依據 cron 排程建立。使用 local 備份目標的缺點是,如果發生全面災難且_所有_ etcd 節點都遺失,則無法還原叢集。
S3 備份目標
我們建議你使用 S3 備份目標。它可以讓你將快照儲存在外部的 S3 相容後端。由於快照不是儲存在本機,因此即使遺失所有 etcd 節點,你仍然可以還原叢集。
雖然 S3 目標比本機備份提供了優勢,但它確實需要額外的設定。
如果你使用 S3 備份目標,請確保每個叢集都有自己的儲存桶或資料夾。Rancher 會從為該叢集設定的 S3 儲存桶或資料夾中列出的任何可用快照填充快照資訊。
| 選項 | 說明 | 必填 |
|---|---|---|
| S3 儲存 桶名稱 | 用於儲存備份的 S3 儲存桶名稱 | * |
| S3 區域 | 備份儲存桶的 S3 區域 | |
| S3 區域端點 | 備份儲存桶的 S3 區域端點 | * |
| S3 存取金鑰 | 具有存取備份儲存桶權限的 S3 存取金鑰 | * |
| S3 秘密金鑰 | 具有存取備份儲存桶權限的 S3 秘密金鑰 | * |
| 自訂 CA 憑證 | 用於存取私有 S3 後端的自訂憑證 |
使用 S3 的自訂 CA 憑證
備份快照可以儲存在自訂的 S3 備份中,例如 minio。如果 S3 後端使用自簽憑證或自訂憑證,請使用 Custom CA Certificate(自訂 CA 憑證)選項提供自訂憑證以連線到 S3 後端。
在 S3 中儲存快照的 IAM 支援
S3 備份目標除了使用 API 憑證外,還支援使用 IAM 驗證來存取 AWS API。IAM 角色為應用程式在對 S3 儲存進行 API 呼叫時提供臨時權限。若要使用 IAM 驗證,必須滿足以下要求:
- 叢集 etcd 節點必須具有對指定備份儲存桶具有讀/寫存取權限的執行個體角色。
- 叢集 etcd 節點必須具有對指定 S3 端點的網路存取權限。
- Rancher Server 工 作節點必須具有對指定備份儲存桶具有讀/寫權限的執行個體角色。
- Rancher Server 工作節點必須具有對指定 S3 端點的網路存取權限。
若要授予應用程式存取 S3 的權限,請參閱 AWS 文件使用 IAM 角色授予在 Amazon EC2 執行個體上執行的應用程式權限。
檢視可用快照
叢集的所有可用快照清單可在 Rancher UI 中取得。
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面中,前往你要檢視快照的叢集,並點擊其名稱。
- 點擊快照標籤以檢視已儲存快照的清單。這些快照包含建立時的時間戳記。
安全時間戳記 (RKE)
快照檔案會加上時間戳記,以簡化使用外部工具和指令碼處理檔案的過程,但在某些 S3 相容後端中,這些時間戳記無法使用。
新增了 safe_timestamp 選項以支援相容的檔案名稱。當此旗標設定為 true 時,快照檔案名稱時間戳記中的所有特殊字元都會被替換。
此選項無法直接在 UI 中使用,僅能透過 Edit as Yaml(編輯為 Yaml)介面使用。