为应用自定义备份和恢复

本页面介绍了如何使用 ProtectedApplication 资源来自定义 Google Distributed Cloud (GDC) 气隙环境中的备份和恢复行为。

本页介绍的步骤是可选的,并非成功配置工作负载备份和恢复的必要步骤。ProtectedApplication 资源是命名空间中的可选 Kubernetes 资源,用于自定义各个有状态应用的备份和恢复。如果没有 ProtectedApplication 资源,则适用以下限制:

  • 您可以将备份和恢复范围粒度限制为命名空间级别。
  • 在执行备份期间,工作负载上不会发生刷新和静默操作。这可能会导致具有多个磁盘的虚拟机在恢复后不具备崩溃一致性。

ProtectedApplication 资源是可选的 Kubernetes 命名空间资源,用于自定义各个有状态应用的备份和恢复。ProtectedApplication 资源定义了哪些 Kubernetes 资源属于应用实例。您可以使用 kubectl 命令手动设置专用编排,以便在以下场景中备份和恢复这些应用:

  • 用于识别命名空间中可独立于该命名空间中的其他资源进行备份或恢复的一组资源。ProtectedApplication 是您可以为备份或恢复范围确定的最精细的命名空间实体。
  • ProtectedApplication 属于备份范围时,提供专门的备份编排。具体而言,如果 ProtectedApplication 直接或通过来自 StatefulSet 的模板包含 PersistentVolumeClaim (PVC) 资源,您可以在备份卷之前和之后运行 钩子。钩子是在应用容器中运行的命令。这些钩子通常用于清空、静默或取消静默操作,并提供应用一致性备份。

准备工作

如需使用 ProtectedApplication 资源,您必须具备以下条件:

  • 您必须先定义 ProtectedApplication 资源,然后才能创建备份方案。如需了解详情,请参阅规划一组备份
  • 必要的身份和访问权限角色:

    • 对于平台管理员 (PA) 用户:
      • 用户集群备份管理员:管理用户集群中的备份资源,例如备份和恢复计划。请让您的组织 IAM 管理员为您授予 User Cluster Backup Admin (user-cluster-backup-admin) 角色。
    • 对于应用运营商 (AO) 用户:
      • 备份创建器:创建手动备份和恢复。请让您的 Project IAM Admin 向您授予 Backup Creator (backup-creator) 角色。
    • 如需了解详情,请参阅角色定义

部署受保护的应用资源

以下示例展示了一个 Deployment 规范,其中包含一个 ProtectedApplication 资源,该资源会在备份期间备份与应用关联的所有资源,并在恢复期间恢复所有资源:

apiVersion: v1
kind: Namespace
metadata:
  name: USER_CLUSTER_NS
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: protected-application-deployment
  namespace: USER_CLUSTER_NS
  labels:
    app: protected
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: unprotected-application-deployment
  namespace: USER_CLUSTER_NS
  labels:
    app: unprotected
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---

apiVersion: gkebackup.gke.io/v1
kind: ProtectedApplication
metadata:
  name: PROTECTED_APP_NAME
  namespace: USER_CLUSTER_NS
spec:
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: protected
  components:
    - name: application-deployment
      resourceKind: Deployment
      resourceNames:
        - protected-application-deployment
      strategy:
        type: BackupAllRestoreAll

替换以下内容:

  • USER_CLUSTER_NS:受保护的应用所在的用户集群中的命名空间。
  • PROTECTED_APP_NAMEProtectedApplication 的名称。

此示例包含以下 ProtectedApplication 值:

说明
resourceSelection 定义如何识别属于受保护应用的资源:
  • type: 指定以下其中一项:
    • ApplicationName:备份同一命名空间内的 sig-apps 应用。
    • Selector:备份同一命名空间内与给定选择器匹配的资源。
  • applicationName:如果 typeApplicationName,则指定同一命名空间内 sig-apps 应用的名称。数据保护规范所适用的应用。
  • selector:如果 typeSelector,则指定用于选择同一命名空间内资源的标签选择器。
components 受保护应用的组件列表,例如部署或有状态集:
  • name:组件的唯一名称。
  • resourceKind:选择 DeploymentStatefulSet
  • resourceNames:用于标识命名空间中 resourceKind 的名称列表。
  • strategy:有关如何备份或恢复此组件的其他详细信息。如需了解详情,请参阅受保护的应用策略

backupScope 中指定 selectedApplications 列表中的 ProtectedApplication。例如:

apiVersion: backup.gdc.goog/v1
kind: BackupPlan
metadata:
  name: BACKUP_PLAN
  namespace: USER_CLUSTER_NS
spec:
  clusterName: USER_CLUSTER
  backupSchedule:
    cronSchedule: CRON_SCHEDULE
    paused: BACKUP_SCHEDULE_STATUS
  backupConfig:
    backupScope:
      selectedApplications:
        namespacedNames:
        - name: PROTECTED_APP_NAME
          namespace: USER_CLUSTER_NS
    backupRepository: BACKUP_REPOSITORY
    retentionPolicy:
      backupDeleteLockDays: BACKUP_DELETE_LOCK_DAYS
      backupRetainDays: BACKUP_RETAIN_DAYS

替换以下内容:

  • BACKUP_PLAN:备份方案的名称。
  • USER_CLUSTER:用户集群的名称。
  • CRON_SCHEDULE:一个 crontab 时间表,用于指明何时安排备份,例如 "*/30 * * * *"。所预定的备份之间的最短间隔为 10 分钟。
  • BACKUP_SCHEDULE_STATUS:如果为 true,则不会安排定期备份。
  • PROTECTED_APP_NAME:您为 ProtectedApplication 资源指定的名称。
  • BACKUP_REPOSITORY:您用于存储备份的备份仓库的名称。
  • BACKUP_DELETE_LOCK_DAYS:防止在创建备份后指定的天数内删除备份,例如 10 days
  • BACKUP_RETAIN_DAYS:定义保留备份的总天数。在此期限过后,系统会自动删除备份。将此值设置为较高的数字可能会导致存储空间耗尽,而将其设置为较低的值可能会增加数据丢失的风险。如果未指定,则默认情况下此值设置为 35。保留政策不会覆盖存储位置的保留政策,也不能超过 90 天。

后续步骤