为应用自定义备份和恢复

本文档介绍了如何使用 ProtectedApplication 资源在 Google Distributed Cloud (GDC) 网闸隔离配置中自定义备份和恢复行为。

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

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

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

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

准备工作

在创建备份方案之前,请先定义 ProtectedApplication 资源。如需了解详情,请参阅规划一组备份。

申请 IAM 角色

如需使用 ProtectedApplication 资源,请让您的 IAM 组织管理员或 IAM 项目管理员为您授予以下角色之一:

  • 用户集群备份管理员 (user-cluster-backup-admin):在用户集群中创建、获取、列出、监视、更新、修补和删除备份资源(例如备份和恢复方案)。请与您的 IAM 组织管理员联系,申请此角色。

  • Backup Creator (backup-creator):创建、获取、列出、监视、更新、修补和删除手动备份请求和手动恢复请求。请与您的 IAM 项目管理员联系,请求授予此角色。

部署受保护的应用资源

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

apiVersion: v1
kind: Namespace
metadata:
  name: "applications"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: protected-application-deployment
  namespace: applications
  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: applications
  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-application-test
  namespace: applications
spec:
  applicationName: protectedApplication
  resourceSelection:
    type: Selector
    selector:
      matchLabels:
        app: protected
  components:
    - name: protect-application-deployment
      resourceKind: Deployment
      resourceNames:
        - protected-application-deployment
      strategy:
        type: BackupAllRestoreAll
        backupAllRestoreAll: {}

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

apiVersion: backup.gdc.goog/v1
kind: BackupPlan
metadata:
  name: protected-application-backupplan-test
  namespace: applications
spec:
  clusterName: "cluster-sample"
  backupSchedule:
    cronSchedule: "*/30 * * * *"
    paused: true
  backupConfig:
    backupScope:
      selectedApplications:
        namespacedNames:
        - name: protected-application-test
          namespace: applications
    backupRepository: "backup-repository"
  retentionPolicy:
    backupDeleteLockDays: 10
    backupRetainDays: 10

此示例包含以下值:

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

后续步骤