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)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
其他资源
- 有关为 vDU 应用程序部署调整的单节点 OpenShift 集群的更多信息,请参阅在单节点 OpenShift 中部署 vDU 的参考配置。
- 如需有关 worker 节点的更多信息,请参阅将 worker 节点添加到单节点 OpenShift 集群。
- 有关从扩展的单节点 OpenShift 集群中删除 worker 节点的详情,请参考使用命令行界面删除受管集群节点。
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 配置集配置。
流程
在其中一个 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 插件的版本进行部署。
在其中一个 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 插件的版本进行部署。
在组策略中,添加以下
complianceType
和spec
条目: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 连接丢失。- 提交 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 节点创建策略。
流程
创建以下策略模板:
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
通用
MachineConfig
CR 用于在 worker 节点上配置工作负载分区。您可以生成crio
和kubelet
配置文件的内容。-
将创建的策略模板添加到由 ArgoCD
policies
应用程序监控的 Git 存储库中。 -
在
kustomization.yaml
文件中添加策略。 - 提交 Git 中的更改,然后推送到由 GitOps ZTP ArgoCD 应用程序监控的 Git 存储库。
要将新策略修复到 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>
流程
如果您使用
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
为新主机创建一个 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
提交 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
状态表示从安装介质引导的节点正在进行中。
持续监控安装过程:
运行以下命令监控代理安装过程:
$ 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
当 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":""}