Skip to main content
NetApp Backup and Recovery
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

添加和保护 Kubernetes 应用程序

贡献者 netapp-mwallis

NetApp Backup and Recovery 使您能够通过 Web UI 或应用自定义资源文件来添加 Kubernetes 应用程序。应用程序可以基于命名空间,由标准 Kubernetes 资源组成,也可以基于 VM,由一个或多个虚拟机组成。

所需的NetApp Console角色

组织管理员或SnapCenter管理员。"了解NetApp Backup and Recovery访问角色""了解所有服务的NetApp Console访问角色"

添加并保护新的 Kubernetes 应用程序

保护 Kubernetes 应用程序的第一步是在 NetApp Backup and Recovery 中创建一个应用程序。创建应用程序时,您可以使 Backup and Recovery 了解 Kubernetes 集群上正在运行的应用程序。

开始之前

在添加和保护 Kubernetes 应用程序之前,您需要"发现 Kubernetes 工作负载"

添加基于命名空间的应用程序 (web UI)
步骤
  1. 在NetApp Backup and Recovery中,选择 Inventory

  2. 选择一个 Kubernetes 实例,然后选择“查看”以查看与该实例关联的资源。

  3. 选择“应用程序”选项卡。

  4. 选择*创建应用程序*。

  5. 输入应用程序的名称。

  6. Cluster 列表中,选择托管应用程序的集群。

  7. 过滤器 下,选择 命名空间 以按命名空间过滤应用程序。

  8. 或者,选择以下任意字段来搜索您想要保护的资源:

    • 关联的命名空间

    • 资源类型

    • 标签选择器

      1. 选择 Add cluster-scoped resources 以添加在集群级别作用域的资源。如果包含它们,它们将在创建应用程序时添加到应用程序中。

      2. 或者,选择“搜索”以根据您的搜索条件查找资源。

        备注 Backup and Recovery 不存储搜索参数或结果;这些参数用于搜索所选 Kubernetes 集群中可以包含在应用程序中的资源。
  9. Backup and Recovery 显示符合搜索条件的资源列表。

  10. 如果列表包含您想要保护的资源,请选择“下一步”。

  11. (可选)在“策略”区域中,选择现有保护策略来保护应用程序,或者创建新策略。如果不选择策略,则创建的应用程序将不带保护策略。你可以"添加保护策略"之后。

  12. 在*Prescripts and postscripts*区域中,启用并配置您想要在备份操作之前或之后运行的任何prescript或postscript执行挂钩。要启用处方或附言,您必须至少已创建了一个"执行钩子模板"

  13. 选择“创建”。

结果

应用程序已创建并显示在 Kubernetes 库存的 Applications 选项卡中的应用程序列表中。Backup and Recovery 可根据您的设置为应用程序提供保护,您可以在 Monitoring 区域中监控进度。

添加基于 VM 的应用程序(Web UI)
步骤
  1. 在NetApp Backup and Recovery中,选择 Inventory

  2. 选择一个 Kubernetes 实例,然后选择“查看”以查看与该实例关联的资源。

  3. 选择“应用程序”选项卡。

  4. 选择*创建应用程序*。

  5. 输入应用程序的名称。

  6. Cluster 列表中,选择托管应用程序的集群。

  7. 筛选器 下,选择 虚拟机 以创建基于 VM 的应用程序。

  8. 通过选择命名空间并可选地包括标签选择器,查找要添加到应用程序的虚拟机。

    备注 如果从列表中选择 VM,则应用程序定义为静态—稍后不会将新 VM 添加到应用程序(您需要编辑应用程序以添加和保护它们)。如果使用标签选择器,则无法选择单个 VM 或编辑生成的列表,但后来与选择器匹配的任何 VM 都会自动包括在内并受到保护。

    所选虚拟机将显示在右侧的列表中。

  9. 如果列表包含要保护的虚拟机,请选择 下一步

  10. (可选)在“策略”区域中,选择现有保护策略来保护应用程序,或者创建新策略。如果不选择策略,则创建的应用程序将不带保护策略。你可以"添加保护策略"之后。

  11. 在*Prescripts and postscripts*区域中,启用并配置您想要在备份操作之前或之后运行的任何prescript或postscript执行挂钩。要启用处方或附言,您必须至少已创建了一个"执行钩子模板"

  12. 选择“创建”。

结果

应用程序已创建并出现在 Kubernetes 清单的 应用程序 选项卡中的应用程序列表中。 NetApp Console根据您的设置启用对应用程序的保护,并且您可以在备份和恢复的*监控*区域中监控进度。

添加基于命名空间的应用程序 (CR)
步骤
  1. 创建目标应用程序 CR 文件:

    1. 创建自定义资源 (CR) 文件并将其命名(例如, my-app-name.yaml)。

    2. 配置以下属性:

      • metadata.name:(必需)应用程序自定义资源的名称。请注意您选择的名称,因为保护操作所需的其他 CR 文件会引用此值。

      • spec.includedNamespaces: (Required) 使用命名空间和标签选择器指定应用程序使用的命名空间和资源。应用程序命名空间必须是此列表的一部分。标签选择器是可选的,可用于筛选每个指定命名空间内的资源。

      • spec.includedClusterScopedResources: (Optional) 使用此属性指定要包含在应用程序定义中的群集范围的资源。此属性允许您根据其组、版本、种类和标签选择这些资源。

        • groupVersionKind:(必需)指定集群范围内资源的 API 组、版本和种类。

        • labelSelector:(可选)根据集群范围资源的标签对其进行筛选。

    3. 如果需要,请配置以下注释:

      • metadata.annotations.protect.trident.netapp.io/skip-vm-freeze:(Optional)此注释仅适用于从虚拟机定义的应用程序,例如在 KubeVirt 环境中,在快照之前会发生文件系统冻结。指定此应用程序是否可以在快照期间写入文件系统。如果设置为 true,应用程序将忽略全局设置,并且可以在快照期间写入文件系统。如果设置为 false,应用程序将忽略全局设置,并在快照期间冻结文件系统。如果指定,但应用程序在应用程序定义中没有虚拟机,则忽略注释。如果未指定,则应用程序遵循 "全局文件系统冻结设置"

      • protect.trident.netapp.io/protection-command:(可选)使用此注释指示 Backup and Recovery 保护或停止保护应用程序。可能的值为 protect`或 `unprotect

      • protect.trident.netapp.io/protection-policy-name: (可选) 使用此注释指定要用于保护此应用程序的 Backup and Recovery 保护策略的名称。此保护策略必须已存在于 Backup and Recovery 中。

如果需要在已创建应用程序后应用此批注,可以使用以下命令:

kubectl annotate application -n <application CR namespace> <application CR name> protect.trident.netapp.io/skip-vm-freeze="true"

+
示例 YAML:

+

apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
  annotations:
    protect.trident.netapp.io/skip-vm-freeze: "false"
    protect.trident.netapp.io/protection-command: "protect"
    protect.trident.netapp.io/protection-policy-name: "policy-name"
  name: my-app-name
  namespace: my-app-namespace
spec:
  includedNamespaces:
    - namespace: namespace-1
      labelSelector:
        matchLabels:
          app: example-app
    - namespace: namespace-2
      labelSelector:
        matchLabels:
          app: another-example-app
  includedClusterScopedResources:
    - groupVersionKind:
        group: rbac.authorization.k8s.io
        kind: ClusterRole
        version: v1
      labelSelector:
        matchLabels:
          mylabel: test
  1. Optional)添加包含或排除标有特定标签的资源的筛选:

    • resourceFilter.resourceSelectionCriteria:(筛选时需要)使用 `Include`或 `Exclude`来包含或排除在 resourceMatchers 中定义的资源。添加以下 resourceMatchers 参数以定义要包括或排除的资源:

      • resourceFilter.resourceMatchers:resourceMatcher 对象数组。如果在此数组中定义多个元素,则它们将作为 OR 操作进行匹配,并且每个元素(组、种类、版本)内的字段将作为 AND 操作进行匹配。

        • resourceMatchers[].group:(Optional)要筛选的资源的组。

        • resourceMatchers[].kind:(Optional)要筛选的资源的类型。

        • resourceMatchers[].version:(Optional)要筛选的资源的版本。

        • resourceMatchers[].names:(可选)要过滤的资源的 Kubernetes metadata.name 字段中的名称。

        • resourceMatchers[].namespaces: (Optional) 要过滤的资源的 Kubernetes metadata.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (Optional) 资源的 Kubernetes metadata.name 字段中的标签选择器字符串,如 "Kubernetes 文档" 中所定义。例如: "trident.netapp.io/os=linux"

          备注 当同时使用 `resourceFilter`和 `labelSelector`时, `resourceFilter`首先运行,然后将 `labelSelector`应用于生成的资源。

      例如:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  2. 创建与环境匹配的应用程序 CR 后,应用 CR。例如:

    kubectl apply -f my-app-name.yaml