19.13. 使用 GitOps ZTP 扩展单节点 OpenShift 集群


您可以使用 GitOps Zero Touch Provisioning (ZTP) 扩展单节点 OpenShift 集群。将 worker 节点添加到单节点 OpenShift 集群时,原始单节点 OpenShift 集群会保留 control plane 节点角色。添加 worker 节点不需要现有单节点 OpenShift 集群的任何停机时间。

注意

虽然您可以添加到单节点 OpenShift 集群的 worker 节点数量没有指定的限制,但您必须为额外的 worker 节点重新评估 control plane 节点上的保留 CPU 分配。

如果需要 worker 节点上的工作负载分区,则必须在安装节点前在 hub 集群中部署并修复受管集群策略。这样,工作负载分区 MachineConfig 对象会被呈现,并在 GitOps ZTP 工作流将 MachineConfig ignition 文件应用到 worker 节点前与 worker 机器配置池相关联。

建议您首先修复策略,然后安装 worker 节点。如果在安装 worker 节点后创建工作负载分区清单,您必须手动排空该节点并删除由守护进程集管理的所有 pod。当管理守护进程集创建新 pod 时,新 pod 会处理工作负载分区过程。

重要

使用 GitOps ZTP 将 worker 节点添加到单节点 OpenShift 集群只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

其他资源

19.13.1. 将配置集应用到 worker 节点

您可以使用 DU 配置集配置额外的 worker 节点。

您可以使用 GitOps Zero Touch Provisioning (ZTP) common、组和特定站点的 PolicyGenTemplate 资源将 RAN 分布式单元 (DU) 配置集应用到 worker 节点集群。链接到 ArgoCD policies 应用程序的 GitOps ZTP 管道包括以下 CR,您可以在提取 ztp-site-generate 容器时在 out/argocd/example/policygentemplates 文件夹中找到:

  • common-ranGen.yaml
  • group-du-sno-ranGen.yaml
  • example-sno-site.yaml
  • ns.yaml
  • kustomization.yaml

在 worker 节点上配置 DU 配置集被视为升级。要启动升级流,您必须更新现有策略或创建额外的策略。然后,您必须创建一个 ClusterGroupUpgrade CR 来协调集群组中的策略。

19.13.2. (可选)确保 PTP 和 SR-IOV 守护进程选择器兼容性

如果使用 GitOps Zero Touch Provisioning (ZTP) 插件版本 4.11 或更早版本部署 DU 配置集,则 PTP 和 SR-IOV Operator 可能会被配置为仅将守护进程放在标记为 master 的节点上。此配置可防止 PTP 和 SR-IOV 守护进程在 worker 节点上运行。如果系统上正确配置了 PTP 和 SR-IOV 守护进程节点选择器,您必须更改守护进程,然后才能继续 worker DU 配置集配置。

流程

  1. 在其中一个 spoke 集群中检查 PTP Operator 的守护进程节点选择器设置:

    $ oc get ptpoperatorconfig/default -n openshift-ptp -ojsonpath='{.spec}' | jq

    PTP Operator 的输出示例

    {"daemonNodeSelector":{"node-role.kubernetes.io/master":""}} 1

    1
    如果节点选择器设置为 master,则 spoke 会使用需要更改的 GitOps ZTP 插件的版本进行部署。
  2. 在其中一个 spoke 集群中检查 SR-IOV Operator 的守护进程节点选择器设置:

    $  oc get sriovoperatorconfig/default -n \
    openshift-sriov-network-operator -ojsonpath='{.spec}' | jq

    SR-IOV Operator 的输出示例

    {"configDaemonNodeSelector":{"node-role.kubernetes.io/worker":""},"disableDrain":false,"enableInjector":true,"enableOperatorWebhook":true} 1

    1
    如果节点选择器设置为 master,则 spoke 会使用需要更改的 GitOps ZTP 插件的版本进行部署。
  3. 在组策略中,添加以下 complianceTypespec 条目:

    spec:
        - fileName: PtpOperatorConfig.yaml
          policyName: "config-policy"
          complianceType: mustonlyhave
          spec:
            daemonNodeSelector:
              node-role.kubernetes.io/worker: ""
        - fileName: SriovOperatorConfig.yaml
          policyName: "config-policy"
          complianceType: mustonlyhave
          spec:
            configDaemonNodeSelector:
              node-role.kubernetes.io/worker: ""
    重要

    更改 daemonNodeSelector 字段会导致临时 PTP 同步丢失和 SR-IOV 连接丢失。

  4. 提交 Git 中的更改,然后推送到由 GitOps ZTP ArgoCD 应用程序监控的 Git 存储库。

19.13.3. PTP 和 SR-IOV 节点选择器兼容性

PTP 配置资源和 SR-IOV 网络节点策略使用 node-role.kubernetes.io/master: "" 作为节点选择器。如果额外的 worker 节点与 control plane 节点具有相同的 NIC 配置,则用于配置 control plane 节点的策略可以被 worker 节点重复使用。但是,节点选择器必须更改为选择两种节点类型,例如使用 "node-role.kubernetes.io/worker" 标签。

19.13.4. 使用 PolicyGenTemplate CR 将 worker 节点策略应用到 worker 节点

您可以为 worker 节点创建策略。

流程

  1. 创建以下策略模板:

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: "example-sno-workers"
      namespace: "example-sno"
    spec:
      bindingRules:
        sites: "example-sno" 1
      mcp: "worker" 2
      sourceFiles:
        - fileName: MachineConfigGeneric.yaml 3
          policyName: "config-policy"
          metadata:
            labels:
              machineconfiguration.openshift.io/role: worker
            name: enable-workload-partitioning
          spec:
            config:
              storage:
                files:
                - contents:
                    source: data:text/plain;charset=utf-8;base64,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKcmVzb3VyY2VzID0geyAiY3B1c2hhcmVzIiA9IDAsICJjcHVzZXQiID0gIjAtMyIgfQo=
                  mode: 420
                  overwrite: true
                  path: /etc/crio/crio.conf.d/01-workload-partitioning
                  user:
                    name: root
                - contents:
                    source: data:text/plain;charset=utf-8;base64,ewogICJtYW5hZ2VtZW50IjogewogICAgImNwdXNldCI6ICIwLTMiCiAgfQp9Cg==
                  mode: 420
                  overwrite: true
                  path: /etc/kubernetes/openshift-workload-pinning
                  user:
                    name: root
        - fileName: PerformanceProfile.yaml
          policyName: "config-policy"
          metadata:
            name: openshift-worker-node-performance-profile
          spec:
            cpu: 4
              isolated: "4-47"
              reserved: "0-3"
            hugepages:
              defaultHugepagesSize: 1G
              pages:
                - size: 1G
                  count: 32
            realTimeKernel:
              enabled: true
        - fileName: TunedPerformancePatch.yaml
          policyName: "config-policy"
          metadata:
            name: performance-patch-worker
          spec:
            profile:
              - name: performance-patch-worker
                data: |
                  [main]
                  summary=Configuration changes profile inherited from performance created tuned
                  include=openshift-node-performance-openshift-worker-node-performance-profile
                  [bootloader]
                  cmdline_crash=nohz_full=4-47 5
                  [sysctl]
                  kernel.timer_migration=1
                  [scheduler]
                  group.ice-ptp=0:f:10:*:ice-ptp.*
                  [service]
                  service.stalld=start,enable
                  service.chronyd=stop,disable
            recommend:
            - profile: performance-patch-worker
    1
    该策略应用于带有此标签的所有集群。
    2
    MCP 字段必须设置为 worker
    3
    此通用 MachineConfig CR 用于在 worker 节点上配置工作负载分区。
    4
    必须为每个特定的硬件平台配置 cpu.isolatedcpu.reserved 字段。
    5
    cmdline_crash CPU 集必须与 PerformanceProfile 部分中设置的 cpu.isolated 匹配。

    通用 MachineConfig CR 用于在 worker 节点上配置工作负载分区。您可以生成 criokubelet 配置文件的内容。

  2. 将创建的策略模板添加到由 ArgoCD policies 应用程序监控的 Git 存储库中。
  3. kustomization.yaml 文件中添加策略。
  4. 提交 Git 中的更改,然后推送到由 GitOps ZTP ArgoCD 应用程序监控的 Git 存储库。
  5. 要将新策略修复到 spoke 集群,请创建一个 TALM 自定义资源:

    $ cat <<EOF | oc apply -f -
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: example-sno-worker-policies
      namespace: default
    spec:
      backup: false
      clusters:
      - example-sno
      enable: true
      managedPolicies:
      - group-du-sno-config-policy
      - example-sno-workers-config-policy
      - example-sno-config-policy
      preCaching: false
      remediationStrategy:
        maxConcurrency: 1
    EOF

19.13.5. 使用 GitOps ZTP 将 worker 节点添加到单节点 OpenShift 集群

您可以将一个或多个 worker 节点添加到现有的单节点 OpenShift 集群,以增加集群中的可用 CPU 资源。

先决条件

  • 在 OpenShift Container Platform 4.11 或更高版本的裸机 hub 集群中安装和配置 RHACM 2.6 或更高版本
  • 在 hub 集群中安装 Topology Aware Lifecycle Manager
  • 在 hub 集群中安装 Red Hat OpenShift GitOps
  • 使用 GitOps ZTP ztp-site-generate 容器镜像版本 4.12 或更高版本
  • 使用 GitOps ZTP 部署受管单节点 OpenShift 集群
  • 配置中央基础架构管理,如 RHACM 文档所述
  • 配置 DNS 服务集群来解析内部 API 端点 api-int.<cluster_name>.<base_domain>

流程

  1. 如果您使用 example-sno.yaml SiteConfig 清单部署集群,请将新的 worker 节点添加到 spec.clusters['example-sno'].nodes 列表中:

    nodes:
    - hostName: "example-node2.example.com"
      role: "worker"
      bmcAddress: "idrac-virtualmedia+https://[1111:2222:3333:4444::bbbb:1]/redfish/v1/Systems/System.Embedded.1"
      bmcCredentialsName:
        name: "example-node2-bmh-secret"
      bootMACAddress: "AA:BB:CC:DD:EE:11"
      bootMode: "UEFI"
      nodeNetwork:
        interfaces:
          - name: eno1
            macAddress: "AA:BB:CC:DD:EE:11"
        config:
          interfaces:
            - name: eno1
              type: ethernet
              state: up
              macAddress: "AA:BB:CC:DD:EE:11"
              ipv4:
                enabled: false
              ipv6:
                enabled: true
                address:
                - ip: 1111:2222:3333:4444::1
                  prefix-length: 64
          dns-resolver:
            config:
              search:
              - example.com
              server:
              - 1111:2222:3333:4444::2
          routes:
            config:
            - destination: ::/0
              next-hop-interface: eno1
              next-hop-address: 1111:2222:3333:4444::1
              table-id: 254
  2. 为新主机创建一个 BMC 身份验证 secret,如 SiteConfig 文件的 spec.nodes 部分中的 bmcCredentialsName 字段引用:

    apiVersion: v1
    data:
      password: "password"
      username: "username"
    kind: Secret
    metadata:
      name: "example-node2-bmh-secret"
      namespace: example-sno
    type: Opaque
  3. 提交 Git 中的更改,然后推送到由 GitOps ZTP ArgoCD 应用程序监控的 Git 存储库。

    当 ArgoCD cluster 应用程序同步时,由 GitOps ZTP 插件生成的 hub 集群中会出现两个新清单:

    • BareMetalHost
    • NMStateConfig

      重要

      不应为 worker 节点配置 cpuset 字段。worker 节点的工作负载分区会在节点安装完成后通过管理策略添加。

验证

您可以通过几种方法监控安装过程。

  • 运行以下命令,检查预置备镜像是否已创建:

    $ oc get ppimg -n example-sno

    输出示例

    NAMESPACE       NAME            READY   REASON
    example-sno     example-sno     True    ImageCreated
    example-sno     example-node2   True    ImageCreated

  • 检查裸机主机的状态:

    $ oc get bmh -n example-sno

    输出示例

    NAME            STATE          CONSUMER   ONLINE   ERROR   AGE
    example-sno     provisioned               true             69m
    example-node2   provisioning              true             4m50s 1

    1
    provisioning 状态表示从安装介质引导的节点正在进行中。
  • 持续监控安装过程:

    1. 运行以下命令监控代理安装过程:

      $ oc get agent -n example-sno --watch

      输出示例

      NAME                                   CLUSTER   APPROVED   ROLE     STAGE
      671bc05d-5358-8940-ec12-d9ad22804faa   example-sno   true       master   Done
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Starting installation
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Installing
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Writing image to disk
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Waiting for control plane
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Rebooting
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Done

    2. 当 worker 节点安装完成后,worker 节点证书会被自动批准。此时,worker 会出现在 ManagedClusterInfo 状态中。运行以下命令查看状态:

      $ oc get managedclusterinfo/example-sno -n example-sno -o \
      jsonpath='{range .status.nodeList[*]}{.name}{"\t"}{.conditions}{"\t"}{.labels}{"\n"}{end}'

      输出示例

      example-sno	[{"status":"True","type":"Ready"}]	{"node-role.kubernetes.io/master":"","node-role.kubernetes.io/worker":""}
      example-node2	[{"status":"True","type":"Ready"}]	{"node-role.kubernetes.io/worker":""}

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.