Share via


使用 Azure CLI 備份 Azure Kubernetes Service

本文描述如何使用 Azure CLI 來設定和備份 Azure Kubernetes Service (AKS)。

Azure 備份現在可讓您使用必須安裝在叢集中的備份延伸模組來備份 AKS 叢集 (叢集資源和連結至叢集的永續性磁碟區)。 備份保存庫會透過此備份延伸模組與叢集通訊,以執行備份和還原作業。

在您開始使用 Intune 之前

  • 目前,AKS 備份僅支援以 Azure 磁碟為基礎的永續性磁碟區 (由 CSI 驅動程式啟用)。 備份只會儲存在作業資料存放區中 (在您的租用戶中),且不會移至保存庫。 備份保存庫和 AKS 叢集應該位於相同的區域中。

  • AKS 備份會使用 Blob 容器和資源群組來儲存備份。 Blob 容器中會儲存 AKS 叢集資源,而永續性磁碟區快照集會儲存在資源群組中。 AKS 叢集和儲存位置必須位於相同的區域中。 了解如何建立 Blob 容器

  • 目前,AKS 備份支援一天一次的備份。 它也支援每天更頻繁的備份 (每 4812 小時一次)。 此解決方案可讓您保留資料以供還原,最多可達 360 天。 了解如何建立備份原則

  • 您必須安裝備份延伸模組,才能在 AKS 叢集上設定備份和還原作業。 深入了解備份延伸模組

  • 在起始備份設定和還原作業之前,請確定已為您的訂用帳戶註冊 Microsoft.ContainerService 上的 Microsoft.KubernetesConfigurationMicrosoft.DataProtectionTrustedAccessPreview 功能旗標。

  • 確保先執行所有必要條件,再起始 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),而每個備份的保留期為 365 天

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 的備份提供每天多個備份。 如果您需要更頻繁的備份,請選擇 [每小時] 備份頻率,其間隔為每 46812 小時備份一次。 備份會根據您所選取的 [時間間隔] 進行排程。

例如,如果您選取 [每 4 小時],則會以大約每 4 小時的間隔備份一次,使得備份會平均分散於一天之中。 如果一天備份一次就足夠,請選擇 [每日] 備份頻率。 在每日備份頻率中,您可以指定應該在一天中的哪個時間執行備份。

重要

一天中的時間表示備份開始時間,而不是備份完成的時間。

注意

雖然選取的保存庫具有全域備援設定,但 AKS 的備份目前僅支援快照集資料存放區。 所有備份都會儲存在您訂用帳戶的資源群組中,而不會複製到備份保存庫儲存體。

一旦將範本下載為 JSON 檔案,您就可以視需要編輯它以進行排程和保留。 然後使用產生的 JSON 建立新的原則。 如果您想要編輯每小時頻率或保留期間,請使用 az dataprotection backup-policy trigger set 和/或 az dataprotection backup-policy retention-rule set 命令。 一旦原則 JSON 具有所有必要值,請繼續 az dataprotection backup-policy create 命令,從原則物件建立新的原則。

az dataprotection backup-policy create -g testBkpVaultRG --vault-name TestBkpVault -n mypolicy --policy policy.json

準備 AKS 叢集以進行備份

保存庫和原則建立完成後,您必須執行下列必要條件,讓 AKS 叢集準備好進行備份:

  1. 建立儲存體帳戶和 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 容器時啟用或停用特定功能,例如私人端點

    注意

    1. 儲存體帳戶和 AKS 叢集應該位於相同的區域和訂用帳戶中。
    2. Blob 容器不應該包含任何先前建立的檔案系統 (但 AKS 建立的備份除外)。
    3. 如果您的來源或目標 AKS 叢集位於私人虛擬網路中,則必須建立私人端點,以將儲存體帳戶與 AKS 叢集連線。
  2. 安裝備份延伸模組

    備份延伸模組必須安裝在 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 叢集的節點集區資源群組中建立使用者身分識別。 若要讓延伸模組存取儲存體帳戶,您必須為此身分識別提供儲存體帳戶參與者角色。 若要指派必要的角色,請執行下列命令:

    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 Account Contributor' --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount
    
  3. 啟用信任存取

    若要讓備份保存庫與 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 叢集。

準備要求

備份的設定會以兩個步驟執行:

  1. 準備備份設定,以定義要使用 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
    }
    
  2. 使用 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

下一步