使用 Velero 備份、還原工作負載叢集
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
本文說明如何在 Azure Arc 所啟用的 AKS 中,使用 Azure Blob 儲存體 或 MinIO 記憶體來安裝和使用 Velero 來備份和還原工作負載和目標叢集。
Velero 是開放原始碼社群標準工具,可用來備份和還原 Kubernetes 叢集物件和永續性磁碟區。 它支援各種 記憶體提供者 來儲存其備份。 如果 AKS Arc 目標 Kubernetes 叢集當機且無法復原,您可以使用 Velero 備份將其內容和內部 API 物件還原至新的叢集。
如果您不想將備份儲存在 Azure Blob 儲存體 中,您可以使用 MinIO 搭配 Velero。 本文說明如何安裝和設定 Velero 以使用 Azure Blob 儲存體 或安裝和設定 Velero 以使用 MinIO 記憶體。
注意
Velero 未正式支援 Microsoft Windows。 在測試中,Velero 小組只能備份無狀態的 Windows 應用程式。 Restic
不支援具狀態應用程式或永續性磁碟區的整合和備份。
必要條件
開始部署 Velero 之前,請先完成這些必要條件:
- 安裝 Azure CLI。
- 安裝
Chocolatey
。 您可以使用Chocolatey
在 Windows 電腦上安裝 包含 Velero CLI 的 Velero 用戶端。
使用 Azure Blob 儲存體 安裝 Velero
本節中的程序說明如何安裝 Velero,並使用 Azure Blob 儲存體 進行備份。 如果您不想將備份儲存在 Azure 中,請移至 使用 MiniO 記憶體安裝 Velero。
以系統管理員身分啟動 PowerShell。
使用 Azure CLI 登入 Azure:
az login --use-device-code
執行下列命令以安裝 Velero CLI :
注意
velero 1.10+ 版不再支援旗標 --use-restic,因此必須使用旗標 1.9.x 版
choco install velero
如有需要,請變更為您想要用於備份的 Azure 訂用帳戶。
根據預設,Velero 會將備份儲存在與 VM 和磁碟相同的 Azure 訂用帳戶中,而且不允許您將備份還原至不同訂用帳戶中的資源群組。 若要啟用跨訂用帳戶的備份和還原,請指定要用於備份的訂用帳戶。 如果您已經在要用於備份的訂用帳戶中,則可以略過此步驟。
切換至您要用於備份的訂用帳戶:
使用訂用帳戶名稱來尋找訂用帳戶識別碼:
$AZURE_BACKUP_SUBSCRIPTION_NAME="<NAME_OF_TARGET_SUBSCRIPTION>" $AZURE_BACKUP_SUBSCRIPTION_ID=$(az account list --query="[?name=='$AZURE_BACKUP_SUBSCRIPTION_NAME'].id | [0]" -o tsv)
然後變更訂用帳戶:
az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
建立 Azure 記憶體帳戶和 Blob 容器。
當您將 Azure Blob 儲存體 用於備份時,Velero 需要記憶體帳戶和 Blob 容器來儲存備份。 下列範例顯示新 Velero_Backups 資源群組中建立的記憶體帳戶。
您必須使用可在 DNS 中使用的全域唯一識別碼來建立記憶體帳戶。 範例腳本會
uuidgen
使用應用程式隨機產生唯一的名稱。 只要名稱遵循 記憶體帳戶的 Azure 命名規則,您就可以使用任何方法。儲存器帳戶是以待用加密功能建立, (使用 Microsoft 受控密鑰) ,且設定為只允許透過 HTTPS 連線進行存取。
若要建立記憶體帳戶和 Blob 容器,請遵循下列步驟:
建立備份記憶體帳戶的資源群組。 視需要將目錄變更為您慣用的位置,然後執行下列命令:
$AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups" az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
建立儲存體帳戶:
$AZURE_STORAGE_ACCOUNT_ID="<NAME_OF_ACCOUNT_TO_ASSIGN>" az storage account create --name $AZURE_STORAGE_ACCOUNT_ID --resource-group $AZURE_BACKUP_RESOURCE_GROUP --sku Standard_GRS --encryption-services blob --https-only true --kind BlobStorage --access-tier Hot
建立 Blob 容器:
$BLOB_CONTAINER="velero" az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
此範例使用名為 的
velero
Blob 容器。 您可以使用不同的名稱,最好是單一 Kubernetes 叢集的唯一名稱。
建立服務主體:
取得 Azure 帳戶的訂用帳戶識別碼和租使用者識別碼:
$AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv) $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv)
建立具有參與者許可權的服務主體。
您可以使用參與者角色建立服務主體,或使用自訂角色:
- 參與者角色: 參與者角色會授與整個訂用帳戶的存取權,因此,如果您指派該角色,請務必保護此認證。
- 自定義角色: 如果您需要更嚴格的角色,請使用自定義角色。
指派參與者角色:
如果您使用 Velero 來備份具有多個 Blob 容器的多個叢集,建議您為每個叢集建立唯一的使用者名稱,而不是使用名稱
velero
。若要建立具有參與者角色的服務主體,請使用下列命令。 替代您自己的訂用帳戶標識碼,並選擇性地取代您自己的服務主體名稱。 Microsoft Entra ID 將為您產生秘密。
$AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID)
如有需要,請對命令進行這些調整:
如果您打算針對工作負載叢集和 Velero 備份檔使用不同的訂用帳戶,請提供這兩個訂用帳戶標識碼,如下列範例所示:
$AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID)
如果您不想使用
velero
作為服務主體名稱,請確定--name
您在 Microsoft Entra ID 中選擇是唯一的,而且不會與其他服務主體或應用程式註冊衝突。
重要
只有在建立服務主體時,才會在此步驟期間顯示秘密。 請務必記下秘密,以供日後步驟使用。
使用自訂角色:
如果您想要啟用最低資源提供者動作,請建立自定義角色,並將該角色指派給服務主體。
使用下列內容 建立名為 azure-role.json 的檔案。 替代您自己的自定義角色名稱和訂用帳戶標識碼。
{ "Name": <CUSTOM_ROLE_NAME>, "Id": null, "IsCustom": true, "Description": "Velero related permissions to perform backups, restores and deletions", "Actions": [ "Microsoft.Compute/disks/read", "Microsoft.Compute/disks/write", "Microsoft.Compute/disks/endGetAccess/action", "Microsoft.Compute/disks/beginGetAccess/action", "Microsoft.Compute/snapshots/read", "Microsoft.Compute/snapshots/write", "Microsoft.Compute/snapshots/delete", "Microsoft.Storage/storageAccounts/listkeys/action", "Microsoft.Storage/storageAccounts/regeneratekey/action" ], "NotActions": [], "AssignableScopes": [ "<SUBSCRIPTION_ID>" ] }
建立自訂角色和服務主體:
az role definition create --role-definition azure-role.json $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "<CUSTOM_ROLE>" --query 'password' -o tsv --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID)
如需建立自定義角色的詳細資訊,請參閱 設定 Velero 的許可權。
取得服務主體名稱,並將該名稱指派給 AZURE_CLIENT_ID 變數:
$AZURE_CLIENT_ID=(az ad sp list --display-name "velero" --query '[0].appId' -o tsv)
注意
服務主體到期。 若要瞭解新的服務主體何時到期,請執行此命令:
az ad sp show --id $AZURE_CLIENT_ID
。建立包含 Velero 安裝所需變數的檔案。 這個指令看起來類似下列命令:
AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID} AZURE_TENANT_ID=${AZURE_TENANT_ID} AZURE_CLIENT_ID=${AZURE_CLIENT_ID} AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET} AZURE_RESOURCE_GROUP=${AZURE_BACKUP_RESOURCE_GROUP} AZURE_CLOUD_NAME=AzurePublicCloud" | Out-File -FilePath ./credentials-velero.txt
重要
安裝 Velero 之後,請刪除此檔案。 用戶端密碼是純文本的,這可能會造成安全性風險。
繼續之前,請確認檔案的格式正確。 擴展名並不重要。
- 拿掉任何額外的空格或索引標籤。
- 請確定變數名稱正確。
安裝並啟動 Velero。
在叢集上安裝 Velero,然後開始部署。 此程式會建立名為 的
velero
命名空間,並將名為velero
的部署新增至 命名空間。使用下列命令安裝 Velero。 您必須自定義範例命令。
velero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.5.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero.txt --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID --use-restic
視需要設定下列變數:
此命令會安裝 Microsoft Azure 外掛程式,其必須與您使用的 Velero CLI 版本相容。 此範例命令使用 Microsoft Azure 外掛程式 1.5.0 版,其與最新的 Velero CLI 版本 1.9.0 相容。 若要瞭解要與您的 Valero CLI 版本一起安裝的 Microsoft Azure 外掛程式版本,請參閱 相容性矩陣。
請務必包含 參數,
--use-restic
以使用Restic
在文件系統層級啟用 Kubernetes 磁碟區的備份。Restic
可用來備份任何類型的 Kubernetes 磁碟區。 根據預設,Velero 支援擷取 Amazon EBS 磁碟區、Azure 受控磁碟 和 Google 永續性磁碟的永續性磁碟區快照集。 在 AKS Arc 中,Kubernetes 磁碟區會使用叢集共用磁碟區 (CSV) 來儲存數據。 因此,Restic
需要啟用永續性磁碟區快照集。 AKS Arc 目前不支援磁碟區快照集。subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID
是選擇性的。 只有在 Velero 和工作負載叢集有不同的訂用帳戶標識碼時,才需要包含它。 如果他們使用相同的 Azure 訂用帳戶,您可以移除subscriptionId
參數, 而credentials-velero.txt 檔案會提供該資訊。
Velero 服務會在安裝時自動啟動。
檢查 Velero 服務是否正常執行:
kubectl -n velero get pods kubectl logs deployment/velero -n velero
此命令
get pods
應該會顯示 Velero Pod 正在執行。
使用 MinIO 記憶體安裝 Velero
本節中的程序說明如何安裝 Velero,並使用 MinIO 記憶體進行備份。 如果您想要針對備份使用 Azure Blob 儲存體,請移至安裝具有 Azure Blob 儲存體的 Velero。
如果您不想將備份儲存在MinIO中,請移至設定Velero以使用 Azure Blob 儲存體。
執行下列命令來安裝 Velero CLI。 安裝
Chocolately
如果您還沒有的話。choco install velero
安裝 MinIO:
建立永續性磁碟區來儲存MinIO備份。 此範例會在 AKS Arc 的預設儲存類別中建立持續性磁碟區,該磁碟區已經存在。
使用下列內容建立名為 minio-pv-storage.yaml 的 YAML 檔案:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: minio-pv-claim spec: storageClassName: default accessModes: - ReadWriteOnce resources: requests: storage: 100Gi
執行此命令以建立永續性磁碟區:
kubectl create -f minio-pvc-storage.yaml
建立 部署檔案 minio-deployment.yaml,以啟動 MinIO。 包含下列內容。 部署將使用您所建立的永續性磁碟區。
apiVersion: apps/v1 kind: Deployment metadata: name: minio-deployment spec: selector: matchLabels: app: minio strategy: type: Recreate template: metadata: labels: app: minio spec: volumes: - name: storage persistentVolumeClaim: claimName: minio-pv-claim containers: - name: minio image: minio/minio:latest args: - server - /storage env: - name: MINIO_ACCESS_KEY value: "<you can define this>" - name: MINIO_SECRET_KEY value: "<you can define this>" ports: - containerPort: 9000 hostPort: 9000 volumeMounts: - name: storage mountPath: "/storage"
然後建立部署:
kubectl create -f minio-deployment.yaml
建立名為 minio-service.yaml 的 Kubernetes 服務。 此服務會將外部IP位址提供給MinIO Pod。
使用下列設定建立 YAML 檔案以設定服務:
apiVersion: v1 kind: Service metadata: name: minio-service spec: type: LoadBalancer ports: - port: 9000 targetPort: 9000 protocol: TCP selector: app: minio
然後建立服務:
kubectl create -f mino-service.yaml
執行下列命令以取得 MinIO Pod 的外部 IP 位址。 您將使用該位址來安裝 Velero。
kubectl get svc
若要檢查 MinIO 是否已啟動並執行,請在瀏覽器中登入 IP 位址,或使用 MinIO 用戶端,如下所示。
安裝 MinIO 用戶端,並流覽 MinIO 檔案。
下載 MinIO 用戶端:
Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe
接下來,設定別名:
mc alias set minio http://10.10.77.6:9000 "minio_access_key" "minio_secret_key" --api s3v4
最後,流覽 MinIO 安裝:
mc ls minio
建立貯體來儲存 Velero 檔案。 此貯體將用於 Velero 安裝中。
mc mb minio/velero-backup
使用下列資訊建立 MinIO 認證檔案:
minio.credentials [default] aws_access_key_id=<minio_access_key> aws_secret_access_key=<minio_secret_key>
安裝 Velero:
velero install --provider aws --bucket velero-backup --secret-file .\minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://10.10.77.6:9000 --plugins velero/velero-plugin-for-aws:v1.1.0 --use-restic
執行此命令之前,請先檢查貯體名稱、MinIO 認證,以及 MinIO 外部 IP 位址。
檢查 Velero 服務是否正常執行:
kubectl -n velero get pods kubectl logs deployment/velero -n Velero
此命令
get pods
應該會顯示 Velero Pod 正在執行。
備份叢集
您可以備份或還原叢集中的所有物件,也可以依類型、命名空間和/或標籤來篩選物件。
建立備份
使用 Velero backup create
命令建立所選記憶體的備份。 下列範例會 --default-volumes-to-restic
使用 旗標,此旗標會建立永續性磁碟區的快照集。 如需其他備份選項,請參閱 Velero 備份參考。
叢集中所有命名空間的隨選備份:
velero backup create <BACKUP-NAME> --default-volumes-to-restic
叢集中單一命名空間的隨選備份:
velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
叢集中多個所選命名空間的隨選備份:
velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE-1>, <NAMESPACE-2> --default-volumes-to-restic
檢查備份進度
若要檢查備份的進度,請執行此命令:
velero backup describe <BACKUP-NAME>
如果您使用備份 Azure Blob 儲存體,您可以在您建立的 Blob/容器下,在 Azure 記憶體帳戶中檢視備份。
還原叢集
若要還原叢集,您必須建立新的叢集,才能將舊的叢集還原至。 您無法將叢集備份還原至現有的叢集。
restore
命令可讓您從先前建立的備份還原所有物件和永續性磁碟區。 您也可以只還原物件和永久性磁碟區的篩選子集。 如需更多備份選項,請參閱 資源篩選。
在您想要將備份還原至 目的地叢集 () 的叢集:
使用上述指示部署 Velero。 使用您用於來源叢集的相同 Azure 認證。
執行下列命令,確定已建立 Velero 備份物件。 Velero 資源會與雲端儲存體中的備份檔案進行同步處理。
velero backup describe <BACKUP-NAME>
確認備份 (
BACKUP-NAME
) 出現正確的備份之後,請還原備份中的所有物件:velero restore create --from-backup <BACKUP-NAME>
取得 Velero 命令的說明
若要查看與特定 Velero 命令相關聯的所有選項,請使用 --help
旗標搭配 命令。 例如,velero restore create --help
會顯示與 velero restore create
命令相關聯的所有選項。
例如,若要列出 的所有選項 velero restore
,請執行 velero restore --help
,這會傳回下列資訊:
velero restore [command]
Available Commands:
create Create a restore
delete Delete restores
describe Describe restores
get Get restores
logs Get restore logs
解除安裝 Velero
若要從叢集卸載 Velero,並移除 Velero 安裝所建立的所有資源,請執行下列命令:
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應