22.9. 使用 PolicyGenTemplate 资源进行高级受管集群配置
您可以使用 PolicyGenTemplate
CR 在受管集群中部署自定义功能。
22.9.1. 为集群部署额外的更改
如果需要在基本 GitOps ZTP 管道配置之外更改集群配置,则有三个选项:
- 在 ZTP 管道完成后应用附加配置
- 当 GitOps ZTP 管道部署完成后,部署的集群就可以用于应用程序工作负载。此时,您可以安装其他 Operator 并应用具体具体要求的配置。确保额外的配置不会影响平台或分配的 CPU 预算的性能。
- 在 ZTP 库中添加内容
- 使用 GitOps ZTP 管道部署的基本源自定义资源 (CR) 可以根据需要使用自定义内容增强。
- 为集群安装创建额外的清单
- 在安装过程中应用额外的清单,并使安装过程更高效。
提供额外的源 CR 或修改现有源 CR 可能会影响 OpenShift Container Platform 的性能或 CPU 配置集。
其他资源
- 如需有关添加额外的清单的信息,请参阅 ZTP GitOps 管道中的自定义额外安装清单。
22.9.2. 使用 PolicyGenTemplate CR 覆盖源 CR 内容
PolicyGenTemplate
自定义资源 (CR) 允许您覆盖与 ztp-site-generate
容器中提供的 GitOps 插件提供的基本源 CR 之上的额外配置详情。您可以将 PolicyGenTemplate
CR 视为基础 CR 的逻辑合并或补丁。使用 PolicyGenTemplate
CR 更新基本 CR 的单个字段,或覆盖基本 CR 的整个内容。您可以更新不在基本 CR 中的值和插入字段。
以下示例步骤描述了如何根据 group-du-sno-ranGen.yaml
文件中的 PolicyGenTemplate
CR 为参考配置更新生成的 PerformanceProfile
CR 中的字段。根据要求,使用流程修改 PolicyGenTemplate
的其他部分。
先决条件
- 创建一个 Git 存储库,在其中管理自定义站点配置数据。存储库必须可从 hub 集群访问,并定义为 Argo CD 的源存储库。
流程
查看基准源 CR 以查找现有内容。您可以通过从零接触置备(ZTP)容器提取,来查看参考
PolicyGenTemplate
CR 中列出的源 CR。创建
/out
文件夹:$ mkdir -p ./out
提取源 CR:
$ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.11.1 extract /home/ztp --tar | tar x -C ./out
查看
./out/source-crs/PerformanceProfile.yaml
中的基线PerformanceProfile
CR:apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: $name annotations: ran.openshift.io/ztp-deploy-wave: "10" spec: additionalKernelArgs: - "idle=poll" - "rcupdate.rcu_normal_after_boot=0" cpu: isolated: $isolated reserved: $reserved hugepages: defaultHugepagesSize: $defaultHugepagesSize pages: - size: $size count: $count node: $node machineConfigPoolSelector: pools.operator.machineconfiguration.openshift.io/$mcp: "" net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/$mcp: '' numa: topologyPolicy: "restricted" realTimeKernel: enabled: true
注意如果
PolicyGenTemplate
CR 中未提供,则包含$…
的任何字段都会从生成的 CR 中删除。在
group-du-sno-ranGen.yaml
参考文件中为PerformanceProfile
更新PolicyGenTemplate
条目。以下示例PolicyGenTemplate
CR 小节提供了适当的 CPU 规格,设置hugepages
配置,并添加一个新的字段,将globallyDisableIrqLoadBalancing
设置为 false。- fileName: PerformanceProfile.yaml policyName: "config-policy" metadata: name: openshift-node-performance-profile spec: cpu: # These must be tailored for the specific hardware platform isolated: "2-19,22-39" reserved: "0-1,20-21" hugepages: defaultHugepagesSize: 1G pages: - size: 1G count: 10 globallyDisableIrqLoadBalancing: false
-
提交 Git 中的
PolicyGenTemplate
更改,然后推送到由 GitOps ZTP argo CD 应用程序监控的 Git 存储库。
输出示例
ZTP 应用程序生成包含生成的 PerformanceProfile
CR 的 RHACM 策略。该 CR 的内容通过将 PolicyGenTemplate
中的 PerformanceProfile
条目的 metadata
和 spec
内容合并到源 CR 中。生成的 CR 包含以下内容:
--- apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: openshift-node-performance-profile spec: additionalKernelArgs: - idle=poll - rcupdate.rcu_normal_after_boot=0 cpu: isolated: 2-19,22-39 reserved: 0-1,20-21 globallyDisableIrqLoadBalancing: false hugepages: defaultHugepagesSize: 1G pages: - count: 10 size: 1G machineConfigPoolSelector: pools.operator.machineconfiguration.openshift.io/master: "" net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/master: "" numa: topologyPolicy: restricted realTimeKernel: enabled: true
在从 ztp-site-generate
容器中提取的 /source-crs
文件夹中,$
语法用于模板替换。相反,如果 policyGen
工具看到字符串的 $
前缀,并且您不会在相关 PolicyGenTemplate
CR 中为该字段指定值,则会完全从输出 CR 省略该字段。
一个例外是 /source-crs
YAML 文件中的 $mcp
变量,该文件被替换为来自 PolicyGenTemplate
CR 的 mcp
的指定的值。例如,在 example/policygentemplates/group-du-standard-ranGen.yaml
中,mcp
的值为 worker
:
spec: bindingRules: group-du-standard: "" mcp: "worker"
policyGen
工具将输出 CR 中的 $mcp
实例替换为 worker
。
22.9.3. 在 GitOps ZTP 管道中添加新内容
GitOps ZTP 站点生成器容器中的源 CR 提供一组 RAN 分布式单元(DU)应用程序的重要功能和节点调整设置。它们应用到您使用 ZTP 部署的集群。要在 ztp-site-generate
容器中添加或修改现有的源 CR,重建 ztp-site-generate
容器,并使其可用于 hub 集群,通常是与 hub 集群关联的断开连接的 registry。可以添加任何有效的 OpenShift Container Platform CR。
执行以下步骤在 ZTP 管道中添加新内容。
流程
创建包含 Containerfile 和您要包含在更新的
ztp-site-generate
容器中的源 CR YAML 文件的目录,例如:ztp-update/ ├── example-cr1.yaml ├── example-cr2.yaml └── ztp-update.in
在
ztp-update.in
Containerfile 中添加以下内容:FROM registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.11 ADD example-cr2.yaml /kustomize/plugin/ran.openshift.io/v1/policygentemplate/source-crs/ ADD example-cr1.yaml /kustomize/plugin/ran.openshift.io/v1/policygentemplate/source-crs/
在
ztp-update/
文件夹打开终端窗口并重建容器:$ podman build -t ztp-site-generate-rhel8-custom:v4.11-custom-1
将构建的镜像推送到断开连接的 registry 中,例如:
$ podman push localhost/ztp-site-generate-rhel8-custom:v4.11-custom-1 registry.example.com:5000/ztp-site-generate-rhel8-custom:v4.11-custom-1
对 hub 集群中的 Argo CD 实例进行补丁,以指向新构建的容器镜像:
$ oc patch -n openshift-gitops argocd openshift-gitops --type=json -p '[{"op": "replace", "path":"/spec/repo/initContainers/0/image", "value": "registry.example.com:5000/ztp-site-generate-rhel8-custom:v4.11-custom-1"} ]'
当 Argo CD 实例修补时,
openshift-gitops-repo-server
pod 会自动重启。
验证
验证新的
openshift-gitops-repo-server
pod 是否已完成初始化,并且前面的 repo pod 是否已终止:$ oc get pods -n openshift-gitops | grep openshift-gitops-repo-server
输出示例
openshift-gitops-server-7df86f9774-db682 1/1 Running 1 28s
您必须等到新的
openshift-gitops-repo-server
pod 完成初始化,并在新添加的容器镜像内容可用前终止之前的 pod。
其他资源
-
另外,您可以在应用补丁文件前,对 ArgoCD 进行补丁,如 Configuring the hub cluster with ArgoCD 所述,使用一个更新的
initContainer
镜像来修改argocd-openshift-gitops-patch.json
。
22.9.4. 为 PolicyGenTemplate CR 配置策略合规性评估超时
使用在 hub 集群上安装的 Red Hat Advanced Cluster Management (RHACM) 来监控和报告您的受管集群是否合规。RHACM 使用策略模板来应用预定义的策略控制器和策略。策略控制器是 Kubernetes 自定义资源定义(CRD)实例。
您可以使用 PolicyGenTemplate
自定义资源 (CR) 覆盖默认策略评估间隔。您可以配置持续时间设置,以定义 ConfigurationPolicy
CR 在 RHACM 重新评估集群策略前处于策略合规或不合规的时长。
零接触置备 (ZTP) 策略生成器使用预定义的策略评估间隔生成 ConfigurationPolicy
CR 策略。noncompliant
状态的默认值为 10 秒。compliant
状态的默认值为 10 分钟。要禁用评估间隔,将值设为 never
。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已以具有
cluster-admin
权限的用户身份登录到 hub 集群。 - 您已创建了管理自定义站点配置数据的 Git 存储库。
流程
要为
PolicyGenTemplate
CR 中的所有策略配置评估间隔,请将evaluationInterval
添加到spec
字段中,然后设置适当的compliant
和noncompliant
的值。例如:spec: evaluationInterval: compliant: 30m noncompliant: 20s
要在
PolicyGenTemplate
CR 中为spec.sourceFiles
对象配置评估间隔,请将evaluationInterval
添加到sourceFiles
字段中,例如:spec: sourceFiles: - fileName: SriovSubscription.yaml policyName: "sriov-sub-policy" evaluationInterval: compliant: never noncompliant: 10s
-
在 Git 存储库中提交
PolicyGenTemplate
CR 文件并推送您的更改。
验证
检查管理的 spoke 集群策略是否以预期间隔监控。
-
在受管集群中以具有
cluster-admin
权限的用户身份登录。 获取在
open-cluster-management-agent-addon
命名空间中运行的 pod。运行以下命令:$ oc get pods -n open-cluster-management-agent-addon
输出示例
NAME READY STATUS RESTARTS AGE config-policy-controller-858b894c68-v4xdb 1/1 Running 22 (5d8h ago) 10d
检查应用的策略是以
config-policy-controller
pod 的日志中预期间隔评估:$ oc logs -n open-cluster-management-agent-addon config-policy-controller-858b894c68-v4xdb
输出示例
2022-05-10T15:10:25.280Z info configuration-policy-controller controllers/configurationpolicy_controller.go:166 Skipping the policy evaluation due to the policy not reaching the evaluation interval {"policy": "compute-1-config-policy-config"} 2022-05-10T15:10:25.280Z info configuration-policy-controller controllers/configurationpolicy_controller.go:166 Skipping the policy evaluation due to the policy not reaching the evaluation interval {"policy": "compute-1-common-compute-1-catalog-policy-config"}
22.9.5. 使用验证器通知策略信号 ZTP 集群部署完成
创建一个验证器通知策略,在零接触置备(ZTP)安装和配置完成部署集群时信号。此策略可用于部署单节点 OpenShift 集群、三节点集群和标准集群。
流程
创建包含源文件
validatorCR/informDuValidator.yaml
的独立PolicyGenTemplate
自定义资源 (CR)。每个集群类型只需要一个独立PolicyGenTemplate
CR。例如,此 CR 为单节点 OpenShift 集群应用验证器通知策略:Example single-node cluster validator inform policy CR (group-du-sno-validator-ranGen.yaml)
apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: "group-du-sno-validator" 1 namespace: "ztp-group" 2 spec: bindingRules: group-du-sno: "" 3 bindingExcludedRules: ztp-done: "" 4 mcp: "master" 5 sourceFiles: - fileName: validatorCRs/informDuValidator.yaml remediationAction: inform 6 policyName: "du-policy" 7
- 1
PolicyGenTemplates
对象的名称。此名称也用作在请求的namespace
中创建的placementBinding
、placementRule
和policy
的一部分。- 2
- 这个值应该与组
PolicyGenTemplates
中使用的命名空间
匹配。 - 3
bindingRules
中定义的group-du-*
标签必须存在于SiteConfig
文件中。- 4
bindingExcludedRules
中定义的标签必须是'ztp-done:'。ztp-done
标签用于与 Topology Aware Lifecycle Manager 协调。- 5
mcp
定义在源文件validatorCR/informDuValidator.yaml
中使用的MachineConfigPool
对象。它应该是单一节点的master
,以及用于标准集群部署的三节点集群部署和worker
。- 6
- 可选。默认值是
inform
。 - 7
- 这个值被用作生成的 RHACM 策略的名称的一部分。单一节点示例生成的验证器策略是
group-du-sno-validator-du-policy
。
-
在 Git 存储库中提交
PolicyGenTemplate
CR 文件并推送更改。
其他资源
22.9.6. 使用 PolicyGenTemplate CR 配置 PTP 快速事件
您可以为使用 GitOps Zero Touch Provisioning(ZTP)管道部署的 vRAN 集群配置 PTP fast 事件。使用 PolicyGenTemplate
自定义 CR 作为基础来创建根据您的特定站点要求量身定制的配置文件的层次结构。
先决条件
- 创建一个 Git 存储库,在其中管理自定义站点配置数据。
流程
将以下 YAML 添加到
common-ranGen.yaml
文件中的.spec.sourceFiles
中,以配置 AMQP Operator:#AMQ interconnect operator for fast events - fileName: AmqSubscriptionNS.yaml policyName: "subscriptions-policy" - fileName: AmqSubscriptionOperGroup.yaml policyName: "subscriptions-policy" - fileName: AmqSubscription.yaml policyName: "subscriptions-policy"
根据您的具体要求,将以下
PolicyGenTemplate
应用到group-du-3node-ranGen.yaml
、group-du-sno-ranGen.yaml
或group-du-standard-ranGen.yaml
文件:在
.sourceFiles
中,添加PtpOperatorConfig
CR 文件,该文件将 AMQ 传输主机配置为config-policy
:- fileName: PtpOperatorConfigForEvent.yaml policyName: "config-policy"
为 PTP 时钟类型和接口配置
linuxptp
和phc2sys
。例如,将以下小节添加到.sourceFiles
中:- fileName: PtpConfigSlave.yaml 1 policyName: "config-policy" metadata: name: "du-ptp-slave" spec: profile: - name: "slave" interface: "ens5f1" 2 ptp4lOpts: "-2 -s --summary_interval -4" 3 phc2sysOpts: "-a -r -m -n 24 -N 8 -R 16" 4 ptpClockThreshold: 5 holdOverTimeout: 30 #secs maxOffsetThreshold: 100 #nano secs minOffsetThreshold: -100 #nano secs
- 1
- 可以是
PtpConfigMaster.yaml
、PtpConfigSlave.yaml
或PtpConfigSlaveCvl.yaml
,具体取决于您的要求。PtpConfigSlaveCvl.yaml
为 Intel E810 Columbiaville NIC 配置linuxptp
服务。对于基于group-du-sno-ranGen.yaml
或group-du-3node-ranGen.yaml
的配置,请使用PtpConfigSlave.yaml
。 - 2
- 特定于设备的接口名称。
- 3
- 您必须将
--summary_interval -4
值附加到.spec.sourceFiles.spec.profile
中的ptp4lOpts
中,以启用 PTP fast 事件。 - 4
- 所需的
phc2sysOpts
值。-m
将消息输出到stdout
。linuxptp-daemon
DaemonSet
解析日志并生成 Prometheus 指标。 - 5
- 可选。如果
ptpClockThreshold
小节不存在,则默认值用于ptpClockThreshold
字段。小节显示默认的ptpClockThreshold
值。ptpClockThreshold
值配置 PTP master 时钟在触发 PTP 事件前的时长。holdOverTimeout
是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为FREERUN
前的时间值(以秒为单位)。maxOffsetThreshold
和minOffsetThreshold
设置以纳秒为单位,它们与CLOCK_REALTIME
(phc2sys
) 或 master 偏移 (ptp4l
) 的值进行比较。当ptp4l
或phc2sys
偏移值超出这个范围时,PTP 时钟状态被设置为FREERUN
。当偏移值在这个范围内时,PTP 时钟状态被设置为LOCKED
。
将以下
PolicyGenTemplate
更改应用到您的特定站点 YAML 文件,如example-sno-site.yaml
:在
.sourceFiles
中,添加Interconnect
CR 文件,该文件将 AMQ 路由器配置为config-policy
:- fileName: AmqInstance.yaml policyName: "config-policy"
- 将任何其他必要的更改和文件与自定义站点存储库合并。
- 将更改推送到站点配置存储库,以使用 GitOps ZTP 将 PTP 快速事件部署到新站点。
其他资源
- 有关如何安装 AMQ Interconnect Operator 的更多信息,请参阅安装 AMQ 消息总线。
22.9.7. 使用 PolicyGenTemplate CR 配置裸机事件监控
您可以使用 GitOps Zero Touch Provisioning (ZTP) 管道为 vRAN 集群配置裸机硬件事件。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 创建一个 Git 存储库,在其中管理自定义站点配置数据。
流程
要配置 AMQ Interconnect Operator 和 Bare Metal Event Relay Operator,请将以下 YAML 添加到
common-ranGen.yaml
文件中的spec.sourceFiles
中:# AMQ interconnect operator for fast events - fileName: AmqSubscriptionNS.yaml policyName: "subscriptions-policy" - fileName: AmqSubscriptionOperGroup.yaml policyName: "subscriptions-policy" - fileName: AmqSubscription.yaml policyName: "subscriptions-policy" # Bare Metal Event Rely operator - fileName: BareMetalEventRelaySubscriptionNS.yaml policyName: "subscriptions-policy" - fileName: BareMetalEventRelaySubscriptionOperGroup.yaml policyName: "subscriptions-policy" - fileName: BareMetalEventRelaySubscription.yaml policyName: "subscriptions-policy"
将
Interconnect
CR 添加到站点配置文件中的.spec.sourceFiles
中,例如example-sno-site.yaml
文件:- fileName: AmqInstance.yaml policyName: "config-policy"
将
HardwareEvent
CR 添加到特定组配置文件中的spec.sourceFiles
,例如在group-du-sno-ranGen.yaml
文件中:- fileName: HardwareEvent.yaml policyName: "config-policy" spec: nodeSelector: {} transportHost: "amqp://<amq_interconnect_name>.<amq_interconnect_namespace>.svc.cluster.local" 1 logLevel: "info"
- 1
transportHost
URL 由现有的 AMQ Interconnect CR名称
和命名空间
组成。例如,在transportHost: "amq-router.amq-router.svc.cluster.local"
中,AMQ Interconnectname
和namespace
都被设置为amq-router
。
注意每个基板管理控制器 (BMC) 仅需要一个
HardwareEvent
资源。-
在 Git 中提交
PolicyGenTemplate
更改,然后将更改推送到您的站点配置存储库,以使用 GitOps ZTP 将裸机事件监控部署到新站点。 运行以下命令来创建 Redfish Secret:
$ oc -n openshift-bare-metal-events create secret generic redfish-basic-auth \ --from-literal=username=<bmc_username> --from-literal=password=<bmc_password> \ --from-literal=hostaddr="<bmc_host_ip_addr>"
其他资源
- 有关如何安装裸机事件中继的更多信息,请参阅使用 CLI 安装裸机事件中继。
其他资源
- 有关如何为 BMC secret 创建用户名、密码和主机 IP 地址的更多信息,请参阅创建裸机事件和 Secret CR。