Partager via

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

本文介绍如何使用 Azure 门户配置和备份 Azure Kubernetes 服务 (AKS)。 还可以使用 Azure PowerShell 备份 AKS。

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

先决条件

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

  • AKS 备份支持通过 CSI 驱动程序启用的 Azure 磁盘和 Azure SMB 文件的持久卷。 备份数据(包括 Azure 磁盘和基于文件的卷快照)可以存储为操作层中的快照,只有基于 Azure 磁盘的卷快照才能移动到保管库层进行长期存储。 备份保管库和 AKS 群集可以位于同一租户和区域中的不同订阅中。

    • 对于基于 Azure 文件的卷,需要 CSI 驱动程序版本 1.32 或更高版本。
    • 不支持具有专用网络终结点的 Azure 文件存储卷;仅支持具有可公开访问终结点的文件共享。
    • 仅支持包含 25,000 个文件的文件共享或更少。
    • 不支持使用 NFS 协议的 Azure 文件;仅支持 SMB 协议。
  • AKS 备份使用 Blob 容器和资源组来存储备份。 Blob 容器可容纳 AKS 群集资源。 永久性卷快照存储在基于 Azure 磁盘的卷的资源组中。 对于基于 Azure 文件的卷,快照与文件共享一起存储在同一存储帐户中。 AKS 群集和存储位置必须位于同一区域。 了解如何创建 Blob 容器

  • 目前,AKS 备份支持一天备份一次。 它还支持每天进行更频繁的备份(每 4 小时、8 小时和 12 小时备份一次)。 此解决方案可让您将基于 Azure 磁盘的卷的数据保留最多 360 天,以便进行恢复。 对于 Azure 文件卷,备份保留期限最长为 30 天。 了解如何创建备份策略

  • 对于基于 Azure 文件的卷,我们建议创建持久性卷,并将回收策略设置为 “保留”,以确保即使 PVC 被删除,快照仍然可用。 可以使用以下方法设置回收策略: kubectl patch pv <your-pv-name> --patch '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

  • 需要安装备份扩展才能为 AKS 群集配置备份和还原操作。 详细了解备份扩展

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

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

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

创建备份保管库

备份保管库是一个管理实体,用于存储随时间处理的恢复点。 备份保管库还提供执行备份操作的接口。 这些操作包括按需备份、执行还原和创建备份策略。 AKS 备份要求备份保管库和 AKS 群集位于同一区域。 但是,只要它们位于同一租户中,就可以驻留在不同的订阅中。 了解如何创建备份保管库

注意

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

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

  1. 在创建保管库时,将备份存储冗余参数设置为异地冗余。 一旦为保管库设置了冗余,就无法禁用该冗余。

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

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

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

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

创建备份策略

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

创建备份策略:

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

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

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

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

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

    重要

    对于基于 Azure 文件的卷,备份保留期限制为最多 30 天。 Azure 文件存储卷不支持保管库层备份。 如果需要备份具有不同备份目标(保管库和快照)的 Azure 磁盘和 Azure 文件卷,请为每个资源类型创建一个单独的备份实例。 屏幕截图显示了保留设置。

    注意

    • 除了当天的第一次成功备份外,还可以定义当周、当月和当日第一次成功备份的保留规则。 在优先级方面,顺序为年、月、周、日。
    • 可以将保管库层中存储的备份复制到次要区域(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 磁盘快照的资源组,然后选择“ 验证”。 即使您仅备份 Azure 文件卷(因为 Azure 文件快照与文件共享一起存储在存储帐户中),您也需要此资源组。

    验证完成后,如果快照资源组或存储帐户(对于 Azure 文件卷)中未将所需的角色分配给保管库,则会出现错误:

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

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

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

    注意

    对于基于 Azure 文件的卷,备份保管库会自动将 存储文件数据特权参与者 角色分配给存储帐户上的 AKS 群集,用于动态预配卷。 对于静态预配的卷,必须手动分配此角色。

备份配置

使用适用于 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 组列表。

    • “其他选项”:可以为群集范围的资源、永久性卷和机密启用或禁用备份。 群集范围资源和持久卷默认情况下已启用。

      • 卷类型:若要备份基于 Azure 文件的卷,请从“卷类型”下拉列表中选择 Azure SMB 文件共享。 默认情况下,仅选择 Azure 磁盘卷。
      • 机密:如果您正在使用 Kubernetes 机密来存储 Azure 文件卷的存储帐户密钥,请启用包含机密选项。 为了成功执行基于 Azure 文件的卷恢复操作,此操作是必需的。

注意

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

如果要从备份中排除特定的永久性卷声明,请添加批注 velero.io/exclude-from-backup=true。 适用于 AKS 的 Azure 备份支持此 Velero 批注。

验证备份和快照

配置备份后,可以验证备份是否成功运行,并且正在创建快照:

  1. 在 Azure 门户中,转到 备份保管库

  2. 在“管理”下选择“备份实例”以查看 AKS 群集备份实例状态。

  3. 选择 “备份作业 ”以查看已完成的和正在进行的备份操作。

  4. 验证 Azure 文件快照:

    • 转到包含 Azure 文件共享(Azure Files)的存储帐户。
    • 访问您的持久卷使用的文件共享。
    • 选择 “快照 ”以查看 Azure 备份创建的备份快照。
  5. 验证 Azure 磁盘快照的方法:

    • 转到在备份配置期间指定的快照资源组。
    • 查看与基于 Azure 磁盘的永久性卷对应的磁盘快照。

在 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 群集配置备份

    注意

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

后续步骤