開源 Velero Kubernetes 災難復原與備份方案指南

1. 什麼是 Velero?

Velero(以前稱為 Heptio Ark)是一個開源工具,專門設計用於安全地備份和還原 Kubernetes 集群資源和持久卷 (Persistent Volumes, PVs)。它在 Kubernetes 社區中被廣泛視為備份解決方案的黃金標準。

為什麼需要 Velero?Kubernetes 本身沒有備份嗎?

Kubernetes 的核心組件 etcd 存儲了集群的狀態數據。雖然你可以對 etcd 進行快照備份,但這通常是「全有或全無」的。而且,etcd 備份不包含您的應用程序數據(存儲在 PV 中的數據)。

Velero 解決了以下關鍵痛點:

  • 顆粒度備份: 可以選擇備份整個集群、特定的命名空間 (Namespace)、或帶有特定標籤的資源。

  • 數據備份: 除了備份 YAML 配置 (Kubernetes Objects),還能備份持久卷中的實際數據。

  • 集群遷移: 輕鬆將應用程序從一個集群遷移到另一個集群(例如:從本地遷移到雲端,或跨雲遷移)。

  • 災難復原: 在集群發生災難性故障或人為錯誤(例如誤刪命名空間)時快速恢復。

2. Velero 的工作原理與架構

理解 Velero 的架構有助於更好地配置和使用它。

Velero 由兩部分組成:

  1. Velero CLI (客戶端): 一個運行在您本地機器上的命令行工具,用於發送備份/還原指令。

  2. Velero Server (服務端): 運行在 Kubernetes 集群中的 Deployment (包含 Controller)。

核心運作流程:

  1. 對象存儲 (Object Storage): Velero 需要一個外部的 S3 兼容對象存儲桶 (Bucket) 來存放備份文件 (如 AWS S3, Google GCS, Azure Blob, MinIO 等)。

  2. 備份過程:

    • 當你發起備份命令時,Velero Server 會查詢 Kubernetes API Server以獲取資源信息。

    • 它將這些資源打包成一個 tar 文件。

    • 如果有 Persistent Volumes (PV),Velero 會調用雲端提供商的 API 來創建磁碟快照 (Snapshot),或者使用集成的文件系統備份工具 (如 Kopia/Restic) 來備份數據。

    • 最後,將 tar 文件和快照元數據上傳到對象存儲桶。

  3. 還原過程:

    • Velero 從對象存儲下載備份文件。

    • 它解析 tar 文件並開始在 Kubernetes 中重新創建資源(Deployment, Service, PVC 等)。

    • 如果有 PVC,它會根據快照創建新的 PV 並掛載。

3. 關鍵概念解析

在開始之前,需要理解兩個備份數據的關鍵方式:

A. 原生雲端快照 (Native Cloud Snapshots)

如果您的集群運行在 AWS (EBS)、GCP (PD) 或 Azure (Managed Disks) 上,Velero 會使用相應的雲端插件 (Plugin)。

  • 優點: 速度快、效率高,通常是增量備份。

  • 缺點: 依賴於特定的雲端平台。

B. 文件系統備份 (File System Backup - 舊稱 Restic/現主要用 Kopia)

對於不支持原生快照的存儲類型(例如 NFS, HostPath, Longhorn 等),Velero 使用集成的開源工具(目前推薦 Kopia,舊版本使用 Restic)在 Pod 級別掃描文件系統並備份數據。

  • 優點: 通用,適用於任何類型的存儲。

  • 缺點: 對於大量小文件或超大數據集,速度可能比原生快照慢,且會消耗集群的 CPU/內存資源。

  • 注意:要使用此功能,您需要讓 Velero 安裝一個 DaemonSet,在每個節點上運行代理來訪問 PV 數據。

 
前置作業
 
可參考https://velero.io/docs/v1.0.0/gcp-config/
 
創建bucket
創建GCP service account
 
權限需要
 
Kubernetes Engine 叢集管理員
Storage 管理員
kubectl create secret generic cloud-credentials \\
    --from-file yourgcp-ce75eedeb64c.json
Install
下載Helm檔
helm repo add vmware-tanzu <https://vmware-tanzu.github.io/helm-charts>
helm pull vmware-tanzu/velero
tar -xzf velero-*.tgz
cd velero
 
values.yaml設定檔
configuration:
  backupStorageLocation: 
  - name: 
    provider: velero.io/gcp
    bucket: velero-yb
    accessMode: ReadWrite
    credential:
      name: cloud-credentials
      key: yourgcp-ce75eedeb64c.json


  volumeSnapshotLocation:
  - name: velero-volumesnapshot
    provider: gcp


#這個要開才能volumeSnapshot
  features: EnableCSI 

設定排程備份

schedules: 
  volumesnapshot:
    disabled: false
    schedule: "0 * * * *"
    useOwnerReferencesInBackup: false
    paused: false
    template:
      includedNamespaces:
        - default
      ttl: "240h"
      storageLocation: default
      snapshotVolumes: true
      volumeSnapshotLocations:
        - velero-volumesnapshot

 

安裝
helm install velero ../velero  -f values.yaml
更新設定
helm upgrade velero ../velero  -f values.yaml 
 
查看scdhedule
velero get scdhedule
 
查看備份
velero get backup -n default
手動備份
velero backup create test-redis -n default
 
還原備份檔
 
velero restore create --from-backup test-redis -n default

 

 
 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料