使用 Azure CLI 備份 Azure Kubernetes Service
本文描述如何使用 Azure CLI 來設定和備份 Azure Kubernetes Service (AKS)。 您也可以使用 Azure PowerShell 備份 AKS。
Azure 備份現在可讓您使用必須安裝在叢集中的備份延伸模組來備份 AKS 叢集 (叢集資源和連結至叢集的永續性磁碟區)。 備份保存庫會透過此備份延伸模組與叢集通訊,以執行備份和還原作業。
在您開始使用 Intune 之前
目前,AKS 備份僅支援以 Azure 磁碟為基礎的永續性磁碟區 (由 CSI 驅動程式啟用)。 備份只會儲存在作業資料存放區中 (在您的租用戶中),且不會移至保存庫。 備份保存庫和 AKS 叢集應該位於相同的區域中。
AKS 備份會使用 Blob 容器和資源群組來儲存備份。 Blob 容器有儲存在其中的 AKS 叢集資源,而永續性磁碟區快照集會儲存在資源群組中。 AKS 叢集和儲存位置必須位於相同的區域中。 了解如何建立 Blob 容器。
目前,AKS 備份支援一天一次的備份。 它也支援每天更頻繁的備份 (每 4、8 和 12 小時間隔一次)。 此解決方案可讓您保留資料以供還原,最多可達 360 天。 了解如何建立備份原則。
在起始備份組態和還原作業之前,請確定 已
Microsoft.KubernetesConfiguration
為您的訂用帳戶註冊 、Microsoft.DataProtection
Microsoft.ContainerService
和 。請務必先執行所有必要條件,再起始 AKS 備份的備份或還原作業。
如需支援的案例、限制和可用性的詳細資訊,請參閱支援矩陣。
建立備份保存庫
備份保存庫是 Azure 中的管理實體,可儲存 Azure 備份所支援各種較新工作負載的備份資料,例如適用於 PostgreSQL 的 Azure 資料庫伺服器和 Azure 磁碟。 保存庫可讓您輕鬆組織備份資料,同時可減輕管理負擔。 備份保存庫會以 Azure 的 Azure Resource Manager 模型為基礎,可提供增強功能來協助保護備份資料。
建立備份保存庫之前,請選擇保存庫中資料的儲存體備援,然後使用該儲存體備援和位置建立備份保存庫。 深入了解建立備份保存庫。
注意
雖然選取的保存庫可能有全域備援設定,但 AKS 的備份目前僅支援作業層。 所有備份都會儲存在訂用帳戶中與 AKS 叢集相同的區域中,且不會複製到備份保存庫儲存體。
若要建立備份保存庫,請執行下列命令:
az dataprotection backup-vault create --resource-group $backupvaultresourcegroup --vault-name $backupvault --location $region --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"
保存庫建立完成後,請建立備份原則來保護 AKS 叢集。
建立備份原則
若要了解 AKS 備份之備份原則的內部元件,請使用命令 az dataprotection backup-policy get-default-policy-template
擷取原則範本。 此命令會傳回指定資料來源類型的預設原則範本。 使用此原則範本來建立新的原則。
az dataprotection backup-policy get-default-policy-template --datasource-type AzureKubernetesService > akspolicy.json
{
"datasourceTypes": [
"Microsoft.ContainerService/managedClusters"
],
"name": "AKSPolicy1",
"objectType": "BackupPolicy",
"policyRules": [
{
"backupParameters": {
"backupType": "Incremental",
"objectType": "AzureBackupParams"
},
"dataStore": {
"dataStoreType": "OperationalStore",
"objectType": "DataStoreInfoBase"
},
"name": "BackupHourly",
"objectType": "AzureBackupRule",
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2023-01-04T09:00:00+00:00/PT4H"
]
},
"taggingCriteria": [
{
"isDefault": true,
"tagInfo": {
"id": "Default_",
"tagName": "Default"
},
"taggingPriority": 99
}
]
}
},
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P7D",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "OperationalStore",
"objectType": "DataStoreInfoBase"
}
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
]
}
原則範本包含觸發準則 (決定觸發備份作業的因素) 和生命週期 (決定何時刪除、複製或移動備份)。 在 AKS 備份中,觸發程式的預設值是排程的每小時觸發程式是 每 4 小時(PT4H), 而每個備份的保留期為 七天。
Scheduled trigger:
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2023-01-04T09:00:00+00:00/PT4H"
]
}
}
Default retention lifecycle:
"lifecycles": [
{
"deleteAfter": {
"duration": "P7D",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "OperationalStore",
"objectType": "DataStoreInfoBase"
}
}
]
AKS 的備份提供每天多個備份。 如果您需要更頻繁的備份,請選擇 [每小時] 備份頻率,其間隔為每 4、6、8 或 12 小時備份一次。 備份會根據您選取的 時間間隔 進行排程。
重要
一天中的時間表示備份開始時間,而不是備份完成的時間。
將範本下載為 JSON 檔案之後,您可以視需要編輯範本進行排程和保留。 然後使用產生的 JSON 建立新的原則。 如果您想要編輯每小時頻率或保留期間,請使用 az dataprotection backup-policy trigger set
和/或 az dataprotection backup-policy retention-rule set
命令。
注意
若要將您的備份資料儲存在保存庫層中,以長期保留以進行合規性目的,或透過跨區域還原進行區域性災害復原,您必須在預設範本中定義新的保留規則,以定義備份應該儲存在保存庫中的時間長度。
讓我們以範例為例,我們將更新備份原則的默認範本,並新增保留規則,以在保存庫層中保留 30 天的第一次成功備份。
使用 命令 az dataprotection backup-policy retention-rule create-lifecycle
建立保留規則,然後使用命令 '' 將保留規則新增至備份原則範本
az dataprotection backup-policy retention-rule create-lifecycle --count 30 --retention-duration-type Days --copy-option ImmediateCopyOption --target-datastore VaultStore --source-datastore OperationalStore > ./retentionrule.json
az dataprotection backup-policy retention-rule set --lifecycles ./retentionrule.json --name Daily --policy ./akspolicy.json > ./akspolicy.json
一旦原則 JSON 具有所有必要值,請繼續 az dataprotection backup-policy create
命令,從原則物件建立新的原則。
az dataprotection backup-policy create -g testBkpVaultRG --vault-name TestBkpVault -n mypolicy --policy policy.json
準備 AKS 叢集以進行備份
保存庫和原則建立完成後,您必須執行下列必要條件,讓 AKS 叢集準備好進行備份:
建立儲存體帳戶和 Blob 容器。
AKS 的備份會將 Kubernetes 資源儲存在 Blob 容器中作為備份。 若要讓 AKS 叢集準備好進行備份,您必須在叢集中安裝延伸模組。 此延伸模組需要儲存體帳戶和 Blob 容器作為輸入。
若要建立新的儲存體帳戶,請執行下列命令:
az storage account create --name $storageaccount --resource-group $storageaccountresourcegroup --location $region --sku Standard_LRS
儲存體帳戶建立完成後,請執行下列命令,在其中建立 Blob 容器:
az storage container create --name $blobcontainer --account-name $storageaccount --auth-mode login
了解如何在建立儲存體帳戶和 Blob 容器時啟用或停用特定功能,例如私人端點。
注意
- 儲存體帳戶和 AKS 叢集應該位於相同的區域和訂用帳戶中。
- Blob 容器不應該包含任何先前建立的檔案系統 (但 AKS 的備份除外)。
- 如果您的來源或目標 AKS 叢集位於私人虛擬網路中,則必須建立私人端點,以將儲存體帳戶與 AKS 叢集連線。
安裝備份延伸模組。
備份延伸模組必須安裝在 AKS 叢集中,才能執行任何備份和還原作業。 備份延伸模組會在叢集中建立命名空間
dataprotection-microsoft
,並使用相同的命名空間來部署其資源。 延伸模組需要儲存體帳戶和 Blob 容器作為安裝的輸入。az k8s-extension create --name azure-aks-backup --extension-type microsoft.dataprotection.kubernetes --scope cluster --cluster-type managedClusters --cluster-name $akscluster --resource-group $aksclusterresourcegroup --release-train stable --configuration-settings blobContainer=$blobcontainer storageAccount=$storageaccount storageAccountResourceGroup=$storageaccountresourcegroup storageAccountSubscriptionId=$subscriptionId
在延伸模組安裝期間,系統會在 AKS 叢集的節點集區資源群組中建立使用者身分識別。 若要讓擴充功能存取記憶體帳戶,您必須提供此身分識別記憶體 Blob 數據參與者 角色。 若要指派必要的角色,請執行下列命令:
az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $akscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor' --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount
啟用信任存取
若要讓備份保存庫與 AKS 叢集連線,您必須啟用信任存取,因為它可讓備份保存庫能夠直接看到 AKS 叢集。
若要啟用信任存取,請執行下列命令:
az aks trustedaccess rolebinding create --cluster-name $akscluster --name backuprolebinding --resource-group $aksclusterresourcegroup --roles Microsoft.DataProtection/backupVaults/backup-operator --source-resource-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/BackupVaults/$backupvault
設定備份
有了已建立的備份保存庫和備份原則,以及處於備妥以進行備份狀態的 AKS 叢集,您現在可以開始備份 AKS 叢集。
準備要求
備份的設定會以兩個步驟執行:
準備備份設定,以定義要使用
az dataprotection backup-instance initialize-backupconfig
命令備份哪些叢集資源。 命令會產生 JSON,您可以視需要更新以定義 AKS 叢集的備份設定。az dataprotection backup-instance initialize-backupconfig --datasource-type AzureKubernetesService > aksbackupconfig.json { "excluded_namespaces": null, "excluded_resource_types": null, "include_cluster_scope_resources": true, "included_namespaces": null, "included_resource_types": null, "label_selectors": null, "snapshot_volumes": true }
下列命名空間會略過備份組態,但未針對備份進行設定:kube-system、kube-node-lease、kube-public。
使用
az dataprotection backup-instance initialize
命令搭配相關的保存庫、原則、AKS 叢集、備份設定和快照集資源群組來準備相關要求。az dataprotection backup-instance initialize --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --datasource-location $region --datasource-type AzureKubernetesService --policy-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupPolicies/$backuppolicy --backup-configuration ./aksbackupconfig.json --friendly-name ecommercebackup --snapshot-resource-group-name $snapshotresourcegroup > backupinstance.json
現在,使用此命令的 JSON 輸出來設定 AKS 叢集的備份。
指派必要的權限並驗證
備份保存庫使用受控識別來存取其他 Azure 資源。 如果要設定 AKS 叢集的備份,備份保存庫的受控識別需要 AKS 叢集與資源群組上的一組權限,其中會建立及管理快照集。 此外,AKS 叢集需要快照集資源群組的權限。
只有系統指派的受控識別目前支援備份 (備份保存庫和 AKS 叢集)。 系統指派的受控識別限定為每個資源一個,而且只在此資源的生命週期內存在。 您可以使用 Azure 角色型存取控制 (Azure RBAC),授與對受控識別的權限。 受控識別是可能僅適用於 Azure 資源之特殊類型的服務主體。 深入了解受控識別。
備妥要求後,您必須先執行下列命令,以驗證是否需要將所需的角色指派給上述資源:
az dataprotection backup-instance validate-for-backup --backup-instance ./backupinstance.json --ids /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault
如果驗證失敗,而且缺少某些權限,您可以執行下列命令來指派這些權限:
az dataprotection backup-instance update-msi-permissions command.
az dataprotection backup-instance update-msi-permissions --datasource-type AzureKubernetesService --operation Backup --permissions-scope ResourceGroup --vault-name $backupvault --resource-group $backupvaultresourcegroup --backup-instance backupinstance.json
指派權限之後,請使用下列驗證備份命令重新驗證:
az dataprotection backup-instance create --backup-instance backupinstance.json --resource-group $backupvaultresourcegroup --vault-name $backupvault
執行隨選備份
若要擷取您要用來觸發備份的相關備份執行個體,請執行 az dataprotection backup-instance list-from-resourcegraph --
命令。
az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --query aksAssignedIdentity.id
現在,執行下列命令來觸發備份執行個體的隨選備份:
az dataprotection backup-instance adhoc-backup --rule-name "BackupDaily" --ids /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstanceid
追蹤作業
執行 az dataprotection job
命令追蹤備份工作。 您可以列出所有工作,並擷取特定的工作詳細資料。
您也可以執行 az dataprotection job list-from-resourcegraph
命令來取得相關工作,以使用 Resource Graph 來追蹤所有訂用帳戶、資源群組和備份保存庫的所有工作
針對隨選備份:
az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation OnDemandBackup
針對排程備份:
az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation ScheduledBackup