使用 Azure 备份来备份 Azure Kubernetes 服务

本文介绍如何配置和备份 Azure Kubernetes 服务 (AKS)。

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

先决条件

为 AKS 群集配置备份之前要确保的事项:

  • 目前,AKS 备份仅支持由 CSI 驱动程序启用的基于 Azure 磁盘存储的永久性卷。 备份仅存储在操作数据存储中(备份数据存储在租户中,不会移动到保管库)。 备份保管库和 AKS 群集必须位于同一区域。
  • AKS 备份使用 Blob 容器和资源组来存储备份。 Blob 容器可容纳 AKS 群集资源。 永久性卷快照存储在资源组中。 AKS 群集和存储位置必须位于同一区域。 了解如何创建 Blob 容器
  • 目前,AKS 备份支持一天备份一次。 它还支持每天进行更频繁的备份(每 4 小时、8 小时和 12 小时备份一次)。 此解决方案使你可以将数据保留最多 360 天以用于还原。 了解如何创建备份策略
  • 需要安装备份扩展才能为 AKS 群集配置备份和还原操作。 详细了解备份扩展
  • 在启动备份配置和还原操作之前,请确保为订阅注册了 Microsoft.KubernetesConfigurationMicrosoft.DataProtectionMicrosoft.ContainerService
  • 在启动 AKS 备份的备份或还原操作之前,请确保完成所有先决条件

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

创建备份保管库

备份保管库是一个管理实体,用于存储随时间处理的恢复点。 备份保管库还提供执行备份操作的接口。 这些操作包括按需备份、执行还原和创建备份策略。 AKS 备份要求备份保管库和 AKS 群集位于同一区域。 了解如何创建备份保管库

注意

备份保管库是一种新资源,用于备份新支持的数据源。 备份保管库不同于恢复服务保管库。

如果想要使用 Azure 备份来保护 AKS 群集免受任何区域性中断的影响,可以启用跨区域还原。 若要启用跨区域还原,需要:

  1. 在创建保管库时,将“备份存储冗余”参数设置为“异地冗余”。 设置了保管库的冗余后,就无法将其禁用。

    屏幕截图显示如何启用“备份存储冗余”参数。

  2. 将“保管库属性”下的“跨区域还原”参数设置为“已启用”。 启用此参数后,无法禁用它。

    屏幕截图显示如何启用“跨区域还原”参数。

  3. 使用为保管库标准数据存储设置了保留期的备份策略创建备份实例。 此数据存储中存储的每个恢复点将位于次要区域。

创建备份策略

在配置备份之前,需要创建一个备份策略,用于定义备份的频率和备份保留期。

创建备份策略:

  1. 转到创建的备份保管库,然后选择“管理”>“备份策略”>“添加”

  2. 输入备份策略的名称。

  3. 对于“数据源类型”,选择“Kubernetes 服务”

  4. 在“计划 + 保留”选项卡上,定义“备份计划”

    • 备份频率:选择备份频率(每小时或每日),然后选择备份的保留期。
    • 保留设置:新的备份策略默认定义“默认”规则。 可以编辑此规则,但不能将其删除。 默认规则定义创建的所有操作层备份的保留期。 你还可以创建额外的保留规则来将每日或每周创建的备份存储更长时间。

    屏幕截图显示了保留设置。

    还可以创建额外的保留规则,将每日或每周创建的备份存储更长时间。

    注意

    • 除了当天的第一次成功备份外,还可以定义当周、当月和当日第一次成功备份的保留规则。 在优先级方面,顺序为年、月、周、日。
    • 可以将保管库层中存储的备份复制到次要区域(Azure 配对区域),当主要区域不可用时,可以使用这些备份将 AKS 群集还原到次要区域。 若要选择此功能,请使用启用了“跨区域还原”的异地冗余保管库
  5. 配置备份频率和保留设置后,请选择“下一步”。

  6. 在“查看 + 创建”选项卡中查看信息,然后选择“创建”。

安装备份扩展并配置备份

可以使用 AKS 备份来备份整个群集或部署在群集中的特定群集资源。 还可以根据部署的应用程序计划、保留要求或安全要求来多次保护群集。

注意

若要为同一 AKS 群集设置多个备份实例:

  • 在同一备份保管库中配置备份,但使用不同的备份策略。
  • 在不同的备份保管库中配置备份。

安装备份扩展

若要为 AKS 群集配置备份,请执行以下操作:

  1. 在 Azure 门户中,转到要备份的 AKS 群集。

  2. 在服务菜单中的“设置”下,选择“备份”

  3. 为了让 AKS 群集做好备份或还原准备,请选择“安装扩展”以在群集中安装备份扩展。

  4. 提供存储帐户和 blob 容器作为输入内容。

    AKS 群集备份会存储在此 blob 容器中。 存储帐户必须与群集位于同一区域和订阅中。

    屏幕截图显示了如何为备份添加存储和 blob 详细信息。

  5. 选择下一步。 查看扩展安装详细信息,然后选择“创建”。

    开始安装扩展。

配置备份

  1. 成功安装备份扩展后,选择“配置备份”

  2. 选择之前创建的备份保管库。 备份保管库应启用“受信任的访问”,以便备份 AKS 群集。 要启用受信任的访问,请选择“授予权限”。 如果已启用,请选择“下一步”。

  3. 在“备份策略”选项卡上,选择定义备份计划及其保持期的备份策略,然后选择“下一步”

  4. 在“数据源”选项卡上,选择“添加/编辑”以定义备份实例配置

  5. 在“选择要备份的资源”窗格中,定义要备份的群集资源

    详细了解备份配置

  6. 对于“快照资源组”,请选择用于存储永久性卷(Azure 磁盘存储)快照的资源组,然后选择“验证”

    验证完成后,如果未将所需的角色分配到快照资源组中的保管库,则会出现错误:

    屏幕截图显示了未能分配必需权限时的验证错误。

    要解决该错误,请在“数据源名称”下选择数据源复选框,然后选择“分配缺少的角色”

  7. 角色分配完成后,选择“下一步”>“配置备份”

备份配置

使用适用于 AKS 的 Azure 备份,你可以定义要备份的 AKS 群集内的应用程序边界。 可以使用备份配置中提供的筛选器来选择要备份的资源并运行自定义挂钩。 定义的备份配置由备份实例名称的值引用。 以下筛选器可用于定义应用程序边界:

  1. 选择“选择要备份的命名空间”。 可以选择“全部”来备份群集中所有现有的和将来的命名空间,也可以选择特定的命名空间进行备份

    备份配置将跳过以下命名空间:kube-systemkube-node-leasekube-public

    屏幕截图显示了如何选择要包含在备份中的命名空间。

  2. 展开“其他资源设置”以查看可用于选择要备份的群集资源的筛选器。 可以选择根据以下类别备份资源:

    • “标签”:可以使用分配给资源类型的“标签”来筛选 AKS 资源。 以键/值对的形式输入标签。 可以使用 AND 逻辑合并多个标签。 例如,如果输入标签“env=prod;tier!=web”,则进程会选择其标签带有 env 键和 prod 值的资源,以及标签带有 tier 键但值不为 web 的资源。
    • “API 组”:还可以通过提供 AKS API 组和种类来包含资源。 例如,可以选择备份 AKS 资源,例如“部署”。 可以在此处访问 Kubernetes 定义 API 组列表。
    • “其他选项”:可以为群集范围的资源、永久性卷和机密启用或禁用备份。 群集范围的资源和永久性卷默认已启用。

注意

应为已部署且要备份的每个 Yaml 文件添加标签。 这包括命名空间范围内的资源(如永久性卷声明),以及群集范围的资源(如永久性卷)。

在 AKS 备份过程中使用挂钩

本部分介绍如何使用备份挂钩创建已部署 MySQL 的 AKS 群集的应用程序一致性快照(包含 MySQL 实例的永久性卷)。

可以在 AKS 备份中使用自定义挂钩来完成卷的应用程序一致性快照。 卷用于部署为容器化工作负荷的数据库。

通过使用备份挂钩,可以定义用于冻结和取消冻结 MySQL Pod 的命令,以便获取卷的应用程序快照。 然后,备份扩展会协调运行挂钩中的命令并获取卷快照的步骤。

执行以下操作,以获取已部署 MySQL 的卷的应用程序一致性快照:

  1. 运行 MySQL 的 Pod 已冻结,因此不会在数据库上执行任何新事务。
  2. 获取卷的快照作为备份。
  3. 运行 MySQL 的 Pod 已取消冻结,因此可以在数据库上再次执行事务。

若要在备份配置流中启用备份挂钩以备份 MySQL:

  1. 使用命令编写用于备份挂钩的自定义资源,以冻结和取消冻结 PostgreSQL Pod。

    还可以使用以下示例 YAML 脚本 postgresbackuphook.yaml,其中包含预定义的命令:

    apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
    kind: BackupHook
    metadata:
    # BackupHook CR Name and Namespace
    name: bkphookname0
    namespace: default
    spec:
    # 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:
          command:
          - /sbin/fsfreeze
          - --freeze
          - /var/lib/postgresql/data
          container: webcontainer
          onError: Continue
    # PostHooks is a list of BackupResourceHooks to execute after backing up an item.
    postHooks:
       - exec:
          container: webcontainer
          command:
             - /sbin/fsfreeze
             - --unfreeze
          onError: Fail
          timeout: 10s
    
    
    
  2. 在配置备份之前,必须在 AKS 群集中部署备份挂钩自定义资源。

    要部署脚本,请运行以下命令:

    kubectl apply -f mysqlbackuphook.yaml
    
    
  3. 部署完成后,可以为 AKS 群集配置备份

    注意

    作为备份配置的一部分,必须将自定义资源名称以及部署资源的命名空间作为输入提供。

后续步骤