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

什么是 Azure Kubernetes 服务备份?

Azure Kubernetes 服务 (AKS) 备份是一个简单的云原生过程,可用于备份和还原 AKS 群集中运行的容器化应用程序和数据。 可以为存储在基于 CSI 驱动程序的 Azure 磁盘存储中的永久性卷上的群集状态和应用程序数据配置计划备份。 该解决方案通过在 Blob 容器本地将备份存储为磁盘快照,可以精细控制是选择特定命名空间还是整个群集进行备份或还原。 可以将 AKS 备份用于端到端方案(包括操作恢复、克隆开发人员/测试环境)和群集升级方案。

AKS 备份与 Azure 中的备份中心集成,提供单一视图,帮助你大规模管理、监视、操作和分析备份。 还可以在 AKS 门户中 AKS 实例的资源菜单的“设置”部分下使用备份

注意

使用 Azure 备份的 AKS 的保管库备份和跨区域还原目前为预览版。

AKS 备份是如何工作的?

使用 AKS 备份可以备份 AKS 群集中部署的 AKS 工作负载和永久性卷。 该解决方案要求在 AKS 群集内安装备份扩展。 备份保管库与备份扩展进行通信,以完成与备份和还原相关的操作。 必须使用备份扩展,而且必须将备份扩展安装在 AKS 群集内,才能为群集启用备份和还原。 配置 AKS 备份时,可为存储备份的存储帐户和 Blob 容器添加值。

除备份扩展外,还会在 AKS 群集的受管理资源组中创建用户标识(名为扩展标识)。 此扩展标识在其中的 Blob 容器存储了备份的存储帐户上分配有“存储帐户参与者”角色。

为了支持基于公共、专用和授权 IP 的群集,AKS 备份要求在 AKS 群集和备份保管库之间启用受信任的访问。 受信任的访问允许备份保管库访问 AKS 群集,因为已为其分配用于备份操作的特定权限。 有关 AKS 受信任访问的详细信息,请参阅使用受信任的访问使 Azure 资源能访问 AKS 群集

注意

AKS 备份允许在操作层中存储备份。 操作层是本地数据存储(作为快照在租户中)。 现在可以每天移动一个恢复点,并使用 AKS 备份将其作为 Blob(租户外部)存储在保管库层中。 还可以使用备份保管库来管理备份。

安装备份扩展并启用受信任的访问后,可以根据备份策略为群集配置计划备份。 可以将备份还原到同一订阅和区域中的原始群集或备用群集。 设置特定操作时,可以选择特定命名空间或整个群集作为备份和还原配置。

备份解决方案为群集中部署的 AKS 数据源和该群集永久性卷中存储的数据启用备份操作,然后将备份存储在 Blob 容器中。 基于磁盘的永久性卷作为快照资源组中的磁盘快照进行备份。 Blob 中的快照和群集状态都组合在一起,形成存储在租户中称为操作层的恢复点。 还可以将操作层中的备份(一天、一周、一个月或一年中的第一次成功备份)转换为 Blob,然后每天将它们移到保管库(租户外部)一次。

注意

目前,Azure 备份仅支持基于 CSI 驱动程序的 Azure 磁盘存储的永久性卷。 在备份期间,该解决方案会跳过其他永久性卷类型,如 Azure 文件共享和 Blob。 此外,如果永久性卷的大小小于或等于 1 TB,则备份有资格移动到保管库。

配置备份

  • 若要为 AKS 群集配置备份,首先创建备份保管库。 保管库提供跨各种数据源配置的备份的合并视图。 AKS 备份支持操作层和保管库层备份。

    注意

    • 备份保管库和要备份或还原的 AKS 群集必须位于同一区域和订阅中。
    • 备份保管库存储冗余设置 (LRS/GRS) 仅适用于保管库层中存储的备份。 如果要使用备份进行灾难恢复,请将存储冗余设置为启用了跨区域还原的 GRS。
  • AKS 备份会自动触发计划的备份作业。 该作业将群集资源复制到 Blob 容器,并根据备份频率创建基于磁盘的永久性卷的增量快照。 备份会根据备份策略中定义的保留持续时间保留在操作层和保管库层中,并在持续时间结束后删除。

    注意

    通过对每个备份实例使用不同的备份配置,可以使用 AKS 备份为单个 AKS 群集创建多个备份实例。 但是,应在不同的备份保管库中,或在同一备份保管库中使用单独的备份策略创建 AKS 群集的每个备份实例。

管理备份

完成 AKS 群集的备份配置后,会在备份保管库中创建备份实例。 可以在 AKS 门户中 AKS 实例的“备份”部分中查看群集的备份实例。 可以通过其相应的备份实例对实例执行任何与备份相关的操作,例如启动还原、监视、停止保护等。

AKS 备份还直接与备份中心集成,以帮助你集中管理所有 AKS 群集的保护,以及其他支持备份的工作负载。 备份中心是用于满足所有备份要求的单一视图,例如监视作业以及备份和还原状态。 备份中心有助于确保合规性和治理、分析备份使用情况,以及执行关键的数据备份和还原操作。

AKS 备份使用托管标识来访问其他 Azure 资源。 若要配置 AKS 群集的备份并从早期备份还原,备份保管库的托管标识需要对在其中创建和管理快照的 AKS 群集和快照资源组具有一组权限。 目前,AKS 群集需要对快照资源组具有一组权限。 此外,备份扩展会创建一个用户标识,并分配一组权限来访问存储帐户,其中备份存储在 Blob 中。 可以使用 Azure 基于角色的访问控制 (Azure RBAC) 来授予对托管标识的访问权限。 托管标识是一种只能用于 Azure 资源的特殊类型的服务主体。 详细了解托管标识

从备份还原

可以从恢复点存在的任何时间点还原数据。 恢复点是在备份实例处于受保护状态时创建的,可用于还原数据,直到备份策略保留数据为止。

Azure 备份使你可以选择还原所有备份项,或者使用精细控件通过选择命名空间和其他筛选器选项来从备份中选择特定项。 此外,还可以在原始 AKS 集群(已备份的群集)或备用 AKS 群集上执行还原。 可以将存储在操作层和保管库层中的备份还原到同一订阅和不同订阅中的群集。 仅存储于保管库层中的备份可用于在不同的区域(Azure 配对区域)中还原到群集。

若要还原存储在保管库层中的备份,必须提供备份数据冻结的暂存位置。 此暂存位置包括资源组及其所在区域中的存储帐户,以及用于还原的目标群集的订阅。 在还原期间,将创建特定资源(Blob 容器、磁盘和磁盘快照),作为冻结的一部分,然后在还原操作完成后将其清除。

发生资源冲突(例如备份资源与目标 AKS 群集中的资源同名)时,适用于 AKS 的 Azure 备份当前支持通过以下两个选项执行还原操作。 定义还原配置时,可以选择以下选项之一。

  1. 跳过:默认情况下此选项处于选中状态。 例如,如果你已备份名为 pvc-azuredisk 的 PVC,并且要在具有同名 PVC 的目标群集中还原它,则备份扩展会跳过还原备份的永久性卷声明 (PVC) 操作。 在这种情况下,建议从群集中删除资源,然后执行还原操作,使备份项仅在群集中可用,不会被跳过。

  2. 修补:此选项可用于在目标群集中的资源上修补备份资源中的可变变量。 如果要更新目标群集中的副本数,可以选择修补作为操作。

注意

AKS 备份当前不会删除并重新创建目标群集中的资源(如果它们已存在)。 如果尝试在原始位置还原永久性卷,请删除现有的永久性卷,然后执行还原操作。

对备份和还原使用自定义挂钩

可以使用自定义挂钩执行卷的应用程序一致性快照,这些卷用于部署为容器化工作负载的数据库。

什么是自定义挂钩?

可以使用 AKS 备份在备份和还原操作过程中执行自定义挂钩。 挂钩是配置为在备份操作期间或还原后在容器下的 Pod 中执行一个或多个命令的命令。 可以将这些挂钩定义为自定义资源,并在要备份或还原的 AKS 群集中部署它们。 在所需命名空间的 AKS 群集中部署自定义资源后,需要提供详细信息作为配置备份和还原流的输入。 备份扩展会运行 YAML 文件中定义的挂钩。

注意

挂钩不会在容器的shell中执行。

AKS 中的备份有两种类型的挂钩:

  • 备份挂钩
  • 还原挂钩

备份挂钩

在备份挂钩中,可以将命令配置为在任何自定义操作处理之前(挂钩前)或在完成所有自定义操作并且备份自定义操作指定的任何其他项之后(挂钩后)运行。

例如,此处是要使用备份挂钩部署的自定义资源的 YAML 模板:

apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: BackupHook
metadata:
  # BackupHook CR Name and Namespace
  name: bkphookname0
  namespace: default
spec:
  # BackupHook is a list of hooks to execute before and after backing up a resource.
  backupHook:
    # BackupHook Name. This is the name of the hook that will be executed during backup.
    # compulsory
  - name: hook1
    # Namespaces where this hook will be executed.
    includedNamespaces: 
    - hrweb
    excludedNamespaces:
    labelSelector:
    # PreHooks is a list of BackupResourceHooks to execute prior to backing up an item.
    preHooks:
      - exec:
          # Container is the container in the pod where the command should be executed.
          container: webcontainer
          # Command is the command and arguments to execute.
          command:
            - /bin/uname
            - -a
          # OnError specifies how Velero should behave if it encounters an error executing this hook  
          onError: Continue
          # Timeout is the amount of time to wait for the hook to complete before considering it failed.
          timeout: 10s
      - exec:
          command:
            - /bin/bash
            - -c
            - echo hello > hello.txt && echo goodbye > goodbye.txt
          container: webcontainer
          onError: Continue
    # PostHooks is a list of BackupResourceHooks to execute after backing up an item.
    postHooks:
      - exec:
          container: webcontainer
          command:
            - /bin/uname
            - -a
          onError: Continue
          timeout: 10s

还原挂钩

在还原挂钩脚本中,会编写自定义命令或脚本,以在还原的 AKS Pod 容器中执行。

此处是要使用还原挂钩部署的自定义资源的 YAML 模板:

apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: RestoreHook
metadata:
  name: restorehookname0
  namespace: default
spec:
  # RestoreHook is a list of hooks to execute after restoring a resource.
  restoreHook:
    # Name is the name of this hook.
  - name: myhook-1  
    # Restored Namespaces where this hook will be executed.
    includedNamespaces: 
    excludedNamespaces:
    labelSelector:
    # PostHooks is a list of RestoreResourceHooks to execute during and after restoring a resource.
    postHooks:
      - exec:
          # Container is the container in the pod where the command should be executed.
          container: webcontainer
          # Command is the command and arguments to execute from within a container after a pod has been restored.
          command:
            - /bin/bash
            - -c
            - echo hello > hello.txt && echo goodbye > goodbye.txt
          # OnError specifies how Velero should behave if it encounters an error executing this hook
          # default value is Continue
          onError: Continue
          # Timeout is the amount of time to wait for the hook to complete before considering it failed.
          execTimeout: 30s
          # WaitTimeout defines the maximum amount of time Velero should wait for the container to be ready before attempting to run the command.
          waitTimeout: 5m

了解如何在 AKS 备份期间使用挂钩

AKS 备份支持哪些备份存储层?

AKS 的 Azure 备份支持两个存储层作为备份数据存储:

  • 操作层:AKS 群集中安装的备份扩展首先通过 CSI 驱动程序创建卷快照来获取备份,并将群集状态存储在自己的租户中的 Blob 容器中。 此层支持较低的 RPO,两个备份之间的最短持续时间为 4 小时。 此外,对于基于 Azure 磁盘的卷,操作层支持更快的还原。

  • 保管库标准层(预览版):若要以低于快照的成本存储备份数据,AKS 备份支持保管库标准数据存储。 根据备份策略中设置的保留规则,(一天、一周、一个月或一年)第一次成功的备份将移动到租户外部的 Blob 容器。 此数据存储不仅允许更长的保留期,还提供勒索软件保护。 还可以通过在备份保管库中启用异地冗余和跨区域还原,将保管库中存储的备份移动到另一区域(Azure 配对区域)进行恢复。

注意

可以通过定义保留规则,通过备份策略将备份数据存储到保管库标准数据存储中。 每天只有一个计划的恢复点移动到保管库层。 但是,可以根据所选规则将任意数量的按需备份移动到保管库。

了解定价

产生的费用如下:

  • 受保护的实例费用:AKS 的 Azure 备份每月按命名空间收取受保护的实例费用。 在配置 AKS 群集的备份时,会创建受保护的实例。 每个实例都有特定数量的命名空间,这些命名空间按照备份配置中的定义进行备份。 有关 AKS 备份定价的详细信息,请参阅云备份定价,并选择 Azure Kubernetes 服务作为工作负荷

  • 快照费用:AKS 的 Azure 备份获取存储在 Azure 订阅的资源组中的快照,从而保护基于磁盘的永久性卷。 这些快照会产生快照存储费用。 由于快照不会复制到备份保管库,因此备份存储成本不适用。 有关快照定价的详细信息,请参阅托管磁盘定价

下一步