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 配置集。

其他资源

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 的源存储库。

流程

  1. 查看基准源 CR 以查找现有内容。您可以通过从零接触置备(ZTP)容器提取,来查看参考 PolicyGenTemplate CR 中列出的源 CR。

    1. 创建 /out 文件夹:

      $ mkdir -p ./out
    2. 提取源 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
  2. 查看 ./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 中删除。

  3. 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
  4. 提交 Git 中的 PolicyGenTemplate 更改,然后推送到由 GitOps ZTP argo CD 应用程序监控的 Git 存储库。

输出示例

ZTP 应用程序生成包含生成的 PerformanceProfile CR 的 RHACM 策略。该 CR 的内容通过将 PolicyGenTemplate 中的 PerformanceProfile 条目的 metadataspec 内容合并到源 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 管道中添加新内容。

流程

  1. 创建包含 Containerfile 和您要包含在更新的 ztp-site-generate 容器中的源 CR YAML 文件的目录,例如:

    ztp-update/
    ├── example-cr1.yaml
    ├── example-cr2.yaml
    └── ztp-update.in
  2. 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/
  3. ztp-update/ 文件夹打开终端窗口并重建容器:

    $ podman build -t ztp-site-generate-rhel8-custom:v4.11-custom-1
  4. 将构建的镜像推送到断开连接的 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
  5. 对 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 会自动重启。

验证

  1. 验证新的 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 存储库。

流程

  1. 要为 PolicyGenTemplate CR 中的所有策略配置评估间隔,请将 evaluationInterval 添加到 spec 字段中,然后设置适当的 compliantnoncompliant 的值。例如:

    spec:
      evaluationInterval:
        compliant: 30m
        noncompliant: 20s
  2. 要在 PolicyGenTemplate CR 中为 spec.sourceFiles 对象配置评估间隔,请将 evaluationInterval 添加到 sourceFiles 字段中,例如:

    spec:
      sourceFiles:
       - fileName: SriovSubscription.yaml
         policyName: "sriov-sub-policy"
         evaluationInterval:
           compliant: never
           noncompliant: 10s
  3. 在 Git 存储库中提交 PolicyGenTemplate CR 文件并推送您的更改。

验证

检查管理的 spoke 集群策略是否以预期间隔监控。

  1. 在受管集群中以具有 cluster-admin 权限的用户身份登录。
  2. 获取在 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

  3. 检查应用的策略是以 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 集群、三节点集群和标准集群。

流程

  1. 创建包含源文件 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 中创建的 placementBindingplacementRulepolicy 的一部分。
    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
  2. 在 Git 存储库中提交 PolicyGenTemplate CR 文件并推送更改。

其他资源

22.9.6. 使用 PolicyGenTemplate CR 配置 PTP 快速事件

您可以为使用 GitOps Zero Touch Provisioning(ZTP)管道部署的 vRAN 集群配置 PTP fast 事件。使用 PolicyGenTemplate 自定义 CR 作为基础来创建根据您的特定站点要求量身定制的配置文件的层次结构。

先决条件

  • 创建一个 Git 存储库,在其中管理自定义站点配置数据。

流程

  1. 将以下 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"
  2. 根据您的具体要求,将以下 PolicyGenTemplate 应用到 group-du-3node-ranGen.yamlgroup-du-sno-ranGen.yamlgroup-du-standard-ranGen.yaml 文件:

    1. .sourceFiles 中,添加 PtpOperatorConfig CR 文件,该文件将 AMQ 传输主机配置为 config-policy

      - fileName: PtpOperatorConfigForEvent.yaml
        policyName: "config-policy"
    2. 为 PTP 时钟类型和接口配置 linuxptpphc2sys。例如,将以下小节添加到 .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.yamlPtpConfigSlave.yamlPtpConfigSlaveCvl.yaml,具体取决于您的要求。PtpConfigSlaveCvl.yaml 为 Intel E810 Columbiaville NIC 配置 linuxptp 服务。对于基于 group-du-sno-ranGen.yamlgroup-du-3node-ranGen.yaml 的配置,请使用 PtpConfigSlave.yaml
      2
      特定于设备的接口名称。
      3
      您必须将 --summary_interval -4 值附加到 .spec.sourceFiles.spec.profile 中的 ptp4lOpts 中,以启用 PTP fast 事件。
      4
      所需的 phc2sysOpts 值。-m 将消息输出到 stdoutlinuxptp-daemon DaemonSet 解析日志并生成 Prometheus 指标。
      5
      可选。如果 ptpClockThreshold 小节不存在,则默认值用于 ptpClockThreshold 字段。小节显示默认的 ptpClockThreshold 值。ptpClockThreshold 值配置 PTP master 时钟在触发 PTP 事件前的时长。holdOverTimeout 是在 PTP master clock 断开连接时,PTP 时钟事件状态更改为 FREERUN 前的时间值(以秒为单位)。maxOffsetThresholdminOffsetThreshold 设置以纳秒为单位,它们与 CLOCK_REALTIME (phc2sys) 或 master 偏移 (ptp4l) 的值进行比较。当 ptp4lphc2sys 偏移值超出这个范围时,PTP 时钟状态被设置为 FREERUN。当偏移值在这个范围内时,PTP 时钟状态被设置为 LOCKED
  3. 将以下 PolicyGenTemplate 更改应用到您的特定站点 YAML 文件,如 example-sno-site.yaml

    1. .sourceFiles 中,添加 Interconnect CR 文件,该文件将 AMQ 路由器配置为 config-policy

      - fileName: AmqInstance.yaml
        policyName: "config-policy"
  4. 将任何其他必要的更改和文件与自定义站点存储库合并。
  5. 将更改推送到站点配置存储库,以使用 GitOps ZTP 将 PTP 快速事件部署到新站点。

其他资源

22.9.7. 使用 PolicyGenTemplate CR 配置裸机事件监控

您可以使用 GitOps Zero Touch Provisioning (ZTP) 管道为 vRAN 集群配置裸机硬件事件。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 创建一个 Git 存储库,在其中管理自定义站点配置数据。

流程

  1. 要配置 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"
  2. Interconnect CR 添加到站点配置文件中的 .spec.sourceFiles 中,例如 example-sno-site.yaml 文件:

    - fileName: AmqInstance.yaml
      policyName: "config-policy"
  3. 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 Interconnect namenamespace 都被设置为 amq-router
    注意

    每个基板管理控制器 (BMC) 仅需要一个 HardwareEvent 资源。

  4. 在 Git 中提交 PolicyGenTemplate 更改,然后将更改推送到您的站点配置存储库,以使用 GitOps ZTP 将裸机事件监控部署到新站点。
  5. 运行以下命令来创建 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>"

其他资源

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.