第 11 章 在 PolicyGenerator 或 PolicyGenTemplate CR 中使用 hub 模板
Topology Aware Lifecycle Manager 支持在 GitOps Zero Touch Provisioning (ZTP) 的配置策略中支持 Red Hat Advanced Cluster Management (RHACM) hub 集群模板功能。
hub-side 集群模板允许您定义可动态自定义到目标集群的配置策略。这可减少为具有辅助配置但具有不同值的很多集群创建单独的策略的需求。
策略模板仅限于与定义策略的命名空间相同的命名空间。这意味着,您必须在创建策略的同一命名空间中创建 hub 模板中引用的对象。
使用 PolicyGenTemplate CR 管理和监控对受管集群的策略将在即将发布的 OpenShift Container Platform 发行版本中弃用。使用 Red Hat Advanced Cluster Management (RHACM) 和 PolicyGenerator CR 提供了等效的和改进的功能。
有关 PolicyGenerator 资源的更多信息,请参阅 RHACM 策略生成器 文档。
您可以使用 hub 模板填充应用到受管集群的生成的策略中的组和站点值来管理带有 ConfigMap CR 的集群配置。在站点 PolicyGenerator 或 PolicyGentemplate CR 中使用 hub 模板意味着您不需要为每个站点创建一个策略 CR。
您可以根据用例(如硬件类型或区域)将集群分组到不同的类别中。每个集群都应该有一个与集群所在的组或组对应的标签。如果您管理位于不同 ConfigMap CR 中的每个组的配置值,则只需要一个策略 CR 来使用 hub 模板将更改应用到组中的所有集群。
以下示例演示了如何使用三个 ConfigMap CR 和一个组 PolicyGenerator CR 将站点和组配置应用到按硬件类型和区域分组的集群。
ConfigMap CR 有一个 1 MiB 大小限制 (Kubernetes 文档)。ConfigMap CR 的有效大小被 last-applied-configuration 注解进一步限制。要避免 last-applied-configuration 限制,请在模板 ConfigMap 中添加以下注解:
argocd.argoproj.io/sync-options: Replace=true
argocd.argoproj.io/sync-options: Replace=true
先决条件
-
已安装 OpenShift CLI(
oc)。 -
已以具有
cluster-admin权限的用户身份登录到 hub 集群。 - 您已创建了管理自定义站点配置数据的 Git 存储库。存储库必须可从 hub 集群访问,并定义为 GitOps ZTP ArgoCD 应用程序的源存储库。
流程
创建包含组和站点配置的三个
ConfigMapCR:创建名为
group-hardware-types-configmap的ConfigMapCR,以存放特定于硬件的配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 只有在
ConfigMap大于 1 MiB 时,才需要argocd.argoproj.io/sync-options注解。
创建名为
group-zones-configmap的ConfigMapCR,以存放区域配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
site-data-configmap的ConfigMapCR,以存放特定于站点的配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意每个
ConfigMapCR 必须与从组PolicyGeneratorCR 生成的策略位于同一个命名空间中。-
提交 Git 中的
ConfigMapCR,然后推送到由 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 根据您的要求,创建一个组
PolicyGenerator或PolicyGentemplateCR,它使用 hub 模板从ConfigMap对象获取所需的数据:创建组
PolicyGeneratorCR。这个示例PolicyGeneratorCR 为与policyDefaults.placement字段中列出的标签匹配的集群配置日志、VLAN ID、NIC 和 Performance Profile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建组
PolicyGenTemplateCR。此PolicyGenTemplateCR 示例为与spec.bindingRules下列出的标签匹配的集群配置日志、VLAN ID、NIC 和 Performance Profile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意要检索特定于站点的配置值,请使用
.ManagedClusterName字段。这是一个模板上下文值设置为目标受管集群的名称。要检索特定于组的配置,请使用
.ManagedClusterLabels字段。这是一个模板上下文值设置为受管集群标签的值。提交 Git 中的站点
PolicyGenerator或PolicyGentemplateCR,并推送到由 ArgoCD 应用程序监控的 Git 存储库。注意对引用的
ConfigMapCR 的后续更改不会自动同步到应用的策略。您需要手动同步新的ConfigMap更改来更新现有的PolicyGeneratorCR。请参阅 "Syncing new ConfigMap changes to existing PolicyGenerator 或 PolicyGenTemplate CR"。您可以将相同的
PolicyGenerator或PolicyGentemplateCR 用于多个集群。如果有配置更改,则唯一需要进行修改的ConfigMap对象是保存每个集群配置和受管集群标签的 ConfigMap 对象。