跳至主要内容

備份還原使用指南

Rancher Backups chart 是我們用於災難復原和遷移的解決方案。此 chart 允許你備份 Kubernetes 資源,並將它們儲存到各種持久儲存位置。

此 chart 是一個非常簡單的工具,涉及 Rancher 生態系統的許多不同領域。因此,出現了一些邊界情況,導致某些功能未記錄。本文件的目的是強調 Rancher Backups 的正確和明確使用方式,並討論我們遇到的一些邊界情況。

功能概述​

備份​

operator 會將 chart 中的 resourceSet 捕獲的所有資源收集為記憶體中的非結構化物件。收集資源後,資源的壓縮 tar 檔案會以 JSON 格式儲存為清單集合,然後上傳到使用者定義的物件儲存。此備份可以設定為循環排程,也可以加密。此加密選項很重要,因為某些資源是敏感的,如果不加密,其值會以純文字儲存。

有關設定備份的選項(包括加密)的更多資訊,請參閱備份設定文件。

備註

如備份 Rancher 文件中所述,你必須手動儲存加密設定檔案內容,因為 operator 不會備份它。

還原​

有兩種主要的還原場景:還原到正在執行 Rancher 的叢集,以及還原到全新的叢集。只有當備份是從同一個叢集進行的,並且在還原期間啟用了 prune 選項時,你才能還原到正在執行 Rancher 的叢集。還原具有與備份類似的輸入。它需要備份檔案名稱、encryptionConfigSecret 名稱和儲存位置。

資源按以下順序還原:

  1. 自訂資源定義 (CRDs)
  2. 叢集範圍的資源
  3. 命名空間資源

有關設定還原的選項的更多資訊,請參閱還原設定文件。

資源集​

resourceSet 決定 backup-restore-operator 在備份中收集哪些資源。它是一組 ResourceSelectors,使用鍵/值比對、正規表達式比對或 Kubernetes 用戶端 labelSelector 來定義選擇要求。

resourceSelector 可用的不同欄位包括:

  • apiVersion
  • excludeKinds
  • excludeResourceNameRegexp
  • kinds
  • kindsRegexp
  • labelSelectors
  • namespaceRegexp
  • namespaces
  • resourceNameRegexp
  • resourceNames

Rancher Backups chart 包含一個預設 resourceSet,它是在安裝 chart 時附加到一個大型 resourceSet 的 YAML 檔案組合。檔案順序並不重要。不同版本的 resourceSets 可能有所不同。

警告

如果你希望編輯 resourceSet,請在安裝 chart 之前進行編輯。

正確使用方式​

本節根據使用情況概述 Rancher Backups chart 的正確使用指南。

所有情況​

  • Rancher Backups 必須安裝在本機叢集上。
    • 注意:Rancher Backups 不會處理除安裝它的叢集以外的任何叢集。它可能會還原本機叢集上的叢集資源,但不會與下游叢集通訊或備份它們。
  • 要還原到的 Rancher 版本必須與備份的 Rancher 版本相符。
  • 應考慮 Kubernetes 版本,因為你可能正在還原過時的資源(從你要還原到的 Kubernetes 版本中已棄用的資源)。

備份​

  • 某些使用者產生的資源不會被備份,除非它們可以被預設 resourceSet 捕獲,或 resourceSet 已被修改以捕獲它們。
    • 我們提供了一個標籤 resources.cattle.io/backup:true,當將其新增到任何命名空間中的 secret 時,將導致它被備份。
  • 備份是非變動性的
  • 備份僅限於本機叢集

還原​

  • 還原是指將備份還原到建立備份的同一叢集。這可以在已安裝 Rancher(必須啟用 prune)或未安裝 Rancher(無特殊說明)的情況下進行。
  • 在還原時需要注意的一點是,你可能會發現自己需要「清除」叢集中的任何 Rancher 資源。這可以透過將 Rancher 清理指令碼作為作業部署到叢集來完成。這允許你再次安裝 Rancher Backups 並還原到完全全新的叢集。
    • 確保使用 kubectl 來部署指令碼。

遷移​

遷移有一些更細微的差別,因為我們要還原到不同的叢集。以下是一些經常被遺漏或遺忘的事項。

  • 遷移時 Rancher 網域必須相同。這意味著你之前叢集的網域名稱現在必須指向新叢集。
  • Rancher 不應該已經在你要遷移到的叢集上執行。這可能會導致 Rancher 備份和某些 Rancher 服務出現許多問題。
  • 在還原備份之後,從備份安裝相同版本的 Rancher。
  • 如果你選擇在不同的 Kubernetes 版本上佈建新叢集,請注意這可能會導致各種不支援的行為,因為可用的 Kubernetes API 可能與你進行備份時的 API 不同。這可能導致還原已棄用的資源,從而造成問題。
  • 你不應該在遷移期間執行任何升級。

邊界情況和不當使用​

以下是 Rancher Backups 的一些不正確使用或期望的範例。

升級​

  • 使用 Rancher 備份來升級 Rancher 版本不是有效的使用情況。建議的程序是備份目前版本,然後使用這些說明升級你的 Rancher 執行個體,然後在升級完成後進行另一次備份。這樣,如果升級失敗,你就有一個備份可以還原,而第二個備份將適用於還原到升級後的 Rancher 版本。
  • 使用 Rancher 備份來升級 Kubernetes 版本也不是有效的使用情況。由於 Kubernetes API 和可用資源與版本綁定,使用備份還原進行升級可能會導致資源集不對齊的問題,這些資源可能已棄用、不受支援或已更新。如何升級叢集版本將取決於它的佈建方式,但建議使用與上述相同的格式(備份、升級、備份)。

ResourceSet​

  • 由於來自各個團隊的資源和服務不斷演進,開發人員應注意是否需要從預設 resourceSet 新增或移除新資源。
  • Rancher 備份僅備份預設 resourceSets 捕獲的內容(除非經過編輯)。我們為使用者建立的 secrets 新增了一個特定標籤,該標籤將備份具有該標籤的任何名稱和命名空間的 secret(請參閱備份的正確使用)。

下游叢集​

  • Rancher Backups 僅備份本機叢集上的 Kubernetes 資源。這意味著下游叢集除了在本機叢集的資源中存在之外,不會被觸及或備份。下游叢集的更新和通訊由 rancher-agent 和 rancher-webhook 負責。

還原已刪除的資源​

  • 某些資源會產生外部結果,例如佈建下游叢集。刪除下游叢集並在本機叢集上還原叢集資源不會導致 Rancher 重新佈建該叢集。根據資源的不同,還原可能無法完全將資源恢復到可用狀態。
  • 「還原已刪除的叢集」這個邊界情況不是受支援的功能。對於下游叢集,無論是佈建的還是匯入的,刪除它們會導致一系列清理任務,這些任務不允許使用者還原已刪除的叢集。佈建的叢集將銷毀其節點和與 Rancher 相關的佈建資源,而匯入的叢集可能會銷毀其 Rancher 代理程式以及與本機叢集註冊相關的其他資源/服務。
警告

嘗試刪除和還原下游叢集可能會導致 Rancher、Rancher Backups、rancher-webhook、Fleet 等出現各種問題。不建議這樣做。

Fleet、Harvester 和其他服務​

由 Rancher Backups 備份的其他服務通常會變更和演進。隨著這種情況的發生,它們的資源和備份需求也可能會變更。某些資源可能不需要備份,有些資源可能根本不會被備份。團隊在其開發過程中考慮這一點很重要,並評估其相關的 resourceSets 是否正確捕獲了適當的資源集,以便正確還原其服務。

監控備份和還原​

Rancher 為備份 Operator 提供了開箱即用的監控功能。它們預設為停用,但在部署 operator Helm Chart 時可以輕鬆啟用。

指標​

可以透過在 Helm Chart 值中設定 monitoring.metrics.enabled: true 和 monitoring.serviceMonitor.enabled: true 來啟用指標。啟用後,Operator 會匯出以下指標。請注意,需要事先安裝 rancher-monitoring 才能正確匯出指標。

指標名稱說明
rancher_backup_info特定 Rancher Backup CR 的詳細資訊(標籤:name、status、resourceSetName、retentionCount、backupType、filename、storageLocation、nextSnapshot、lastSnapshot)。類型:GaugeVec。
rancher_backup_count現有 Rancher Backup CRs 的數量。類型:Gauge。
rancher_backups_attempted_totalOperator 處理的 Rancher 備份總數(標籤:name)。類型:CounterVec。
rancher_backups_failed_total此 operator 處理的失敗 Rancher 備份總數(標籤:name)。類型:CounterVec。
rancher_backup_duration_secondsOperator 處理每個備份的持續時間(秒)(標籤:name)。類型:HistogramVec,buckets 可由使用者自訂。
rancher_backup_last_processed_timestamp_seconds處理最後一個備份的 Unix 時間(秒)(標籤:name)。類型:GaugeVec。
rancher_restore_info特定 Rancher Restore CR 的詳細資訊(標籤:name、status、fileName、prune、storageLocation、restoreTime)。類型:GaugeVec。
rancher_restore_count現有 Rancher Restore CRs 的數量。類型:Gauge。

告警​

預設僅提供一個告警「BackupFailed」,當備份無法被 Operator 處理時會警告使用者。可以透過設定 monitoring.prometheusRules.defaultAlert.enabled: true 來啟用它。

使用者也可以透過設定 monitoring.prometheusRules.customRules.enabled: true 並在 monitoring.prometheusRules.customRules.rules 下定義它們來部署自己的告警規則。

儀表板​

Rancher 也提供 Grafana 儀表板來協助監控備份 Operator 的健康狀況。但是,這些儀表板只能由 rancher-monitoring Helm Chart 部署。為此,需要設定 rancherBackupMonitoring.dashboards.enabled: true。

結論​

Rancher Backups 是一個非常有用的工具,但它在範圍和預期用途上有些限制。為了避免可能的困難,重要的是遵循所描述的特定程序以確保 chart 的正確運作。