你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure CLI 备份Azure Kubernetes Service

本文介绍如何使用Azure CLI配置和备份Azure Kubernetes Service (AKS)。 还可以使用 Azure PowerShell 备份 AKS。

Azure Backup现在允许使用备份扩展(必须在群集中安装)备份 AKS 群集(群集资源和附加到群集的永久性卷)。 备份保管库通过此备份扩展与群集通信,以执行备份和还原操作。

开始之前

  • 目前,AKS 备份仅支持基于 Azure 磁盘的永久性卷(由 CSI 驱动程序启用)。 备份仅存储(租户中的)操作数据存储中,不会移动到保管库。 备份保管库和 AKS 群集应位于同一区域。

  • AKS 备份使用 Blob 容器和资源组来存储备份。 Blob 容器中存储了 AKS 群集资源,而永久性卷快照存储在资源组中。 AKS 群集和存储位置必须位于同一区域。 了解如何创建 Blob 容器

  • 目前,AKS 备份支持一天备份一次。 它还支持每天进行更频繁的备份(每 4、8 和 12 小时备份一次)。 此解决方案使你可以将数据保留最多 360 天以用于还原。 了解如何创建备份策略

  • 必须安装备份扩展才能在 AKS 群集上配置备份和还原操作。 详细了解备份扩展

  • 在启动备份配置和还原操作之前,请确保为订阅注册 Microsoft.KubernetesConfigurationMicrosoft.DataProtectionMicrosoft.ContainerService

  • 在启动 AKS 备份的备份或还原操作之前,请确保执行所有先决条件

若要详细了解支持的方案、限制和可用性,请参阅支持矩阵

创建备份保管库

备份保管库是Azure中的管理实体,用于存储Azure Backup支持的各种较新的工作负荷的备份数据,例如Azure Database for PostgreSQL服务器和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) 触发一次,每个备份的保留期为 7 天

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 小时的间隔进行备份。 备份是根据所选的时间间隔安排的。

重要

每日备份时间表示备份开始时间,而不是备份完成时间。 备份计划遵循 ISO 8601 持续时间格式。 但是,不支持重复间隔前缀 R ,因为备份配置为无限期运行。 使用 R 指定的任何值将被忽略。

将模板下载为 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 群集准备好进行备份:

  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 群集位于虚拟网络中,则必须创建专用终结点,将存储帐户连接到 AKS 群集所在的虚拟网络。

#Fetch the Subnet ID using the name of the virtual network and subnet in which cluster resides 
$PESubnetId = az network vnet subnet show --resource-group $aksMCResourceGroup --vnet-name $aksVnetName  --name $PESubnetName --query 'id' --output tsv

#Create a Private Endpoint between Storage Account and the Virtual Network.
az network private-endpoint create `
  --resource-group $aksclusterresourcegroup `
  --name $StoragePrivateEndpoint `
  --vnet-name $aksVnetName `
  --subnet $PESubnetId `
  --private-connection-resource-id $(az storage account show --nameD $storageaccount --resource-group $storageaccountresourcegroup --query "id" --output tsv) `
  --group-ids "blob" `
  --connection-name "StoragePESharedVNetConnection"

在扩展安装过程中,会在 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
  1. 启用受信任的访问

    要让备份保管库与 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,可以更新该 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。

  1. 通过 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

使用单个Azure CLI命令配置备份

Azure Backup提供了简化的体验,以便使用单个Azure CLI命令为Azure Kubernetes Service (AKS)群集配置备份保护。

注意

此过程是一种替代方法。 使用命令创建备份实例 az dataprotection backup-instance initialize-backupconfig 的早期方法将继续像往常一样工作。

AKS 群集的备份配置要求完成多个手动步骤,包括备份扩展安装、存储资源预配、备份保管库和策略创建、AKS 群集与备份保管库之间的受信任访问设置以及备份实例初始化。

为了简化此备份配置,Microsoft提供了一种备用方法来通过运行以下命令为 AKS 群集启用备份保护:

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name>

运行此命令时,Azure Backup会自动执行以下配置工作流:

  • 验证 AKS 群集状态和备份兼容性
  • 创建或重用特定于区域的备份资源组
  • 在 AKS 群集中安装备份扩展(如果尚不存在)
  • 创建或重用备份所需的存储资源
  • 创建或重用备份保管库和备份策略
  • 在备份保管库和 AKS 群集之间启用受信任的访问
  • 初始化和创建备份实例

提供可选的备份配置参数

可以选择提供配置文件以使用现有备份资源或在备份配置期间应用自定义设置。

注意

若要运行此命令,必须在 CLI 版本 1.9.0 及更高版本上。 按照以下步骤安装或更新 CLI 版本:

  • 首次安装: az extension add -n dataprotection
  • 如果已安装,请升级: az extension add -n dataprotection --upgrade
  • 验证版本(必须 >= 1.9.0): az extension show -n dataprotection --query version -o tsv

运行以下命令以使用配置文件启用备份:

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name> \
--backup-strategy <Strategy>\ 
--backup-configuration-file @config.json

配置文件可以包含以下参数:

参数 说明
backupVaultId 使用现有的备份保管库
backupPolicyId 使用现有的备份策略
storageAccountResourceId 使用现有的存储帐户
blobContainerName 指定自定义容器名称
backupResourceGroupId 使用现有资源组
tags 将标记应用于已创建的资源

示例配置文件:

{
     "tags": {
     "Owner": "azure@microsoft.com",
     "Environment": "Production"
    }
}

支持的备份策略

运行以下命令,使用预定义的策略配置备份:

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name> \
--backup-strategy DisasterRecovery\

可以从以下预定义的备份策略中进行选择:

策略 说明
Week(默认值) 将操作存储中的备份保留 7 天
Month 在操作存储中保留备份 30 天
DisasterRecovery 将备份在操作存储中保留 7 天,在保管库存储中保留 90 天
自定义 使用现有的备份保管库和策略

使用 自定义 策略时,需要使用上述配置文件。

有关更多详细信息,请查看此处的 CLI 命令

跟踪作业

运行 az dataprotection job 命令来跟踪备份作业。 你可以列出所有作业并提取特定作业详细信息。

还可以使用 Resource Graph 通过运行 az dataprotection job list-from-resourcegraph 命令来跟踪所有订阅、资源组和备份保管库中的所有作业,以获取相关的作业

对于按需备份

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

后续步骤