使用 Trident Protect 定义管理应用程序
您可以通过创建应用程序 CR 和相关 AppVault CR 来定义要使用 Trident Protect 管理的应用程序。
创建 AppVault CR
您需要创建将在对应用程序执行数据保护操作时使用的 AppVault CR,并且 AppVault CR 需要驻留在安装 Trident Protect 的集群上。AppVault CR 特定于您的环境;有关 AppVault CR 的示例,请参阅 "AppVault 自定义资源。"
定义应用程序
您需要定义要使用 Trident Protect 管理的每个应用程序。您可以通过手动创建应用程序 CR 或使用 Trident Protect CLI 来定义用于管理的应用程序。
-
创建目标应用程序 CR 文件:
-
创建自定义资源 (CR) 文件并将其命名(例如,
maria-app.yaml)。 -
配置以下属性:
-
metadata.name:(必需)应用程序自定义资源的名称。请注意您选择的名称,因为保护操作所需的其他 CR 文件会引用此值。
-
spec.includedNamespaces: (Required) 使用命名空间和标签选择器指定应用程序使用的命名空间和资源。应用程序命名空间必须是此列表的一部分。标签选择器是可选的,可用于筛选每个指定命名空间内的资源。
-
spec.includedClusterScopedResources: (Optional) 使用此属性指定要包含在应用程序定义中的群集范围的资源。此属性允许您根据其组、版本、种类和标签选择这些资源。
-
groupVersionKind:(必需)指定集群范围内资源的 API 组、版本和种类。
-
labelSelector:(可选)根据集群范围资源的标签对其进行筛选。
-
-
metadata.annotations.protect.trident.netapp.io/skip-vm-freeze:(Optional)此批注仅适用于从虚拟机定义的应用程序,例如在 KubeVirt 环境中,快照之前会发生文件系统冻结。指定此应用程序是否可以在快照期间写入文件系统。如果设置为 true,应用程序将忽略全局设置,并且可以在快照期间写入文件系统。如果设置为 false,应用程序将忽略全局设置,并在快照期间冻结文件系统。如果指定,但应用程序在应用程序定义中没有虚拟机,则忽略批注。如果未指定,则应用程序遵循 "全局 Trident Protect 冻结设置"。
-
-
如果需要在已创建应用程序后应用此批注,可以使用以下命令:
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"
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
-
(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"] -
-
创建与环境匹配的应用程序 CR 后,应用 CR。例如:
kubectl apply -f maria-app.yaml
-
使用以下示例之一创建并应用应用程序定义,使用环境中的信息替换括号中的值。可以使用逗号分隔的列表和示例中显示的参数在应用程序定义中包含命名空间和资源。
在创建应用程序时,您可以选择使用注释来指定应用程序是否可以在快照期间写入文件系统。这仅适用于从虚拟机定义的应用程序,例如在 KubeVirt 环境中,在快照之前会发生文件系统冻结。如果将注释设置为
true,应用程序将忽略全局设置,并且可以在快照期间写入文件系统。如果将其设置为false,应用程序将忽略全局设置,并在快照期间冻结文件系统。如果使用注释,但应用程序在应用程序定义中没有虚拟机,则该注释将被忽略。如果不使用注释,应用程序将遵循"全局 Trident Protect 冻结设置"。要在使用 CLI 创建应用程序时指定批注,可以使用 `--annotation`标志。
-
创建应用程序并使用文件系统冻结行为的全局设置:
tridentctl-protect create application <my_new_app_cr_name> --namespaces <namespaces_to_include> --csr <cluster_scoped_resources_to_include> --namespace <my-app-namespace> -
创建应用程序并配置文件系统冻结行为的本地应用程序设置:
tridentctl-protect create application <my_new_app_cr_name> --namespaces <namespaces_to_include> --csr <cluster_scoped_resources_to_include> --namespace <my-app-namespace> --annotation protect.trident.netapp.io/skip-vm-freeze=<"true"|"false">您可以使用
--resource-filter-include`和 `--resource-filter-exclude`标志来基于 `resourceSelectionCriteria(如组、类型、版本、标签、名称和命名空间)包含或排除资源,如以下示例所示:
tridentctl-protect create application <my_new_app_cr_name> --namespaces <namespaces_to_include> --csr <cluster_scoped_resources_to_include> --namespace <my-app-namespace> --resource-filter-include '[{"Group":"apps","Kind":"Deployment","Version":"v1","Names":["my-deployment"],"Namespaces":["my-namespace"],"LabelSelectors":["app=my-app"]}]' -