10.11. 在 PolicyGenTemplate CR 中使用 hub 模板
Topology Aware Lifecycle Manager 支持在 GitOps Zero Touch Provisioning (ZTP) 的配置策略中支持部分 Red Hat Advanced Cluster Management (RHACM) hub 集群模板功能。
hub-side 集群模板允许您定义可动态自定义到目标集群的配置策略。这可减少为具有辅助配置但具有不同值的很多集群创建单独的策略的需求。
策略模板仅限于与定义策略的命名空间相同的命名空间。这意味着,您必须在创建策略的同一命名空间中创建 hub 模板中引用的对象。
以下支持的 hub 模板功能可用于 TALM 的 GitOps ZTP:
fromConfigmap
返回命名的ConfigMap
资源中提供的 data 键的值。注意ConfigMap
CR 有一个 1 MiB 大小限制。ConfigMap
CR 的有效大小被last-applied-configuration
注解进一步限制。要避免last-applied-configuration
限制,请在模板ConfigMap
中添加以下注解:argocd.argoproj.io/sync-options: Replace=true
argocd.argoproj.io/sync-options: Replace=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
base64enc
返回输入字符串的 base64 编码值 -
base64dec
返回 base64 编码的输入字符串的解码值 -
indent
返回输入字符串,并带有添加的缩进空格 -
autoindent
返回输入字符串,并根据父模板中使用的空间添加空格 -
toInt
casts 并返回输入值的整数值 -
toBool
将输入字符串转换为布尔值,并返回布尔值
各种 开源社区功能 也可用于 GitOps ZTP。
10.11.1. hub 模板示例 复制链接链接已复制到粘贴板!
以下代码示例是有效的 hub 模板。每个模板都会从 default
命名空间的 ConfigMap
CR 返回的其名称为 test-config
的值。
使用键
common-key
返回值:{{hub fromConfigMap "default" "test-config" "common-key" hub}}
{{hub fromConfigMap "default" "test-config" "common-key" hub}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
.ManagedClusterName
字段的串联值和字符串-name
返回一个字符串:{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) hub}}
{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) hub}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow casts 并从
.ManagedClusterName
字段的串联值和字符串-name
返回布尔值:{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) | toBool hub}}
{{hub fromConfigMap "default" "test-config" (printf "%s-name" .ManagedClusterName) | toBool hub}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow casts 并从
.ManagedClusterName
字段的串联值和字符串-name
返回整数值:{{hub (printf "%s-name" .ManagedClusterName) | fromConfigMap "default" "test-config" | toInt hub}}
{{hub (printf "%s-name" .ManagedClusterName) | fromConfigMap "default" "test-config" | toInt hub}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.11.2. 使用 hub 模板在组 PolicyGenTemplate CR 中指定组和站点配置 复制链接链接已复制到粘贴板!
您可以使用 hub 模板填充应用到受管集群的生成的策略中的组和站点值来管理带有 ConfigMap
CR 的集群配置。在站点 PolicyGenTemplate
(PGT) CR 中使用 hub 模板意味着您不需要为每个站点创建一个 PolicyGenTemplate
CR。
您可以根据用例(如硬件类型或区域)将集群分组到不同的类别中。每个集群都应该有一个与集群所在的组或组对应的标签。如果您管理位于不同 ConfigMap
CR 中的每个组的配置值,则只需要一个组 PolicyGenTemplate
CR 来使用 hub 模板将更改应用到组中的所有集群。
以下示例演示了如何使用三个 ConfigMap
CR 和一个组 PolicyGenTemplate
CR 将站点和组配置应用到按硬件类型和区域分组的集群。
当您使用 fromConfigmap
功能时,printf
变量仅适用于模板资源 data
键字段。您不能将其与 name
和 namespace
字段一起使用。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已以具有
cluster-admin
权限的用户身份登录到 hub 集群。 - 您已创建了管理自定义站点配置数据的 Git 存储库。存储库必须可从 hub 集群访问,并定义为 GitOps ZTP ArgoCD 应用程序的源存储库。
流程
创建包含组和站点配置的三个
ConfigMap
CR:创建名为
group-hardware-types-configmap
的ConfigMap
CR,以存放特定于硬件的配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 只有在
ConfigMap
大于 1 MiB 时,才需要argocd.argoproj.io/sync-options
注解。
创建名为
group-zones-configmap
的ConfigMap
CR,以存放区域配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
site-data-configmap
的ConfigMap
CR,以存放特定于站点的配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意每个
ConfigMap
CR 必须与从组PolicyGenTemplate
CR 生成的策略位于同一个命名空间中。-
提交 Git 中的
ConfigMap
CR,然后推送到由 Argo CD 应用程序监控的 Git 存储库。 将硬件类型和区域标签应用到集群。以下命令适用于名为
du-sno-1-zone-1
的单个集群,选择的标签为"hardware-type": "hardware-type-1"
和"group-du-sno-zone": "zone-1"
:oc patch managedclusters.cluster.open-cluster-management.io/du-sno-1-zone-1 --type merge -p '{"metadata":{"labels":{"hardware-type": "hardware-type-1", "group-du-sno-zone": "zone-1"}}}'
$ oc patch managedclusters.cluster.open-cluster-management.io/du-sno-1-zone-1 --type merge -p '{"metadata":{"labels":{"hardware-type": "hardware-type-1", "group-du-sno-zone": "zone-1"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用 hub 模板从
ConfigMap
对象获取所需数据的组PolicyGenTemplate
CR。此PolicyGenTemplate
CR 示例为与spec.bindingRules
下列出的标签匹配的集群配置日志、VLAN ID、NIC 和 Performance Profile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要检索特定于站点的配置值,请使用
.ManagedClusterName
字段。这是一个模板上下文值设置为目标受管集群的名称。要检索特定于组的配置,请使用
.ManagedClusterLabels
字段。这是一个模板上下文值设置为受管集群标签的值。在 Git 中提交站点
PolicyGenTemplate
CR,并推送到由 ArgoCD 应用程序监控的 Git 存储库。注意对引用的
ConfigMap
CR 的后续更改不会自动同步到应用的策略。您需要手动同步新的ConfigMap
更改来更新现有的PolicyGenTemplate
CR。请参阅 "Syncing new ConfigMap changes to existing PolicyGenTemplate CR"。您可以将相同的
PolicyGenTemplate
CR 用于多个集群。如果有配置更改,则唯一需要进行修改的ConfigMap
对象是保存每个集群配置和受管集群标签的 ConfigMap 对象。
10.11.3. 将新 ConfigMap 更改同步到现有的 PolicyGenTemplate CR 复制链接链接已复制到粘贴板!
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已以具有
cluster-admin
权限的用户身份登录到 hub 集群。 -
您已创建了
PolicyGenTemplate
CR,它使用 hub 集群模板从ConfigMap
CR 中拉取信息。
流程
-
更新
ConfigMap
CR 的内容,并应用 hub 集群中的更改。 要将更新的
ConfigMap
CR 的内容同步到部署的策略中,请执行以下操作之一:选项 1:删除现有策略。ArgoCD 使用
PolicyGenTemplate
CR 立即重新创建已删除的策略。例如,运行以下命令:oc delete policy <policy_name> -n <policy_namespace>
$ oc delete policy <policy_name> -n <policy_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选项 2:在每次更新 ConfigMap 时,每次更新
ConfigMap
时,将特殊注解policy.open-cluster-management.io/trigger-update
应用到策略。例如:oc annotate policy <policy_name> -n <policy_namespace> policy.open-cluster-management.io/trigger-update="1"
$ oc annotate policy <policy_name> -n <policy_namespace> policy.open-cluster-management.io/trigger-update="1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您必须应用更新的策略才能使更改生效。如需更多信息,请参阅重新处理的特殊注解。
可选:如果存在,删除包含策略的
ClusterGroupUpdate
CR。例如:oc delete clustergroupupgrade <cgu_name> -n <cgu_namespace>
$ oc delete clustergroupupgrade <cgu_name> -n <cgu_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新的
ClusterGroupUpdate
CR,其中包含要应用更新的ConfigMap
更改的策略。例如,将以下 YAML 添加到文件cgr-example.yaml
中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用更新的策略:
oc apply -f cgr-example.yaml
$ oc apply -f cgr-example.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow