4.8. 使用 RHEL KVM 在 IBM Z 和 IBM LinuxONE 上使用多架构计算机器创建集群
要使用 RHEL KVM 在 IBM Z® 和 IBM® LinuxONE (s390x
) 上使用多架构计算机器创建集群,您必须有一个现有的单架构 x86_64
集群。然后,您可以在 OpenShift Container Platform 集群中添加 s390x
计算机器。
在为集群添加 s390x
节点前,您必须将集群升级到使用多架构有效负载的节点。有关迁移到多架构有效负载的更多信息,请参阅迁移到具有多架构计算机器的集群。
以下流程描述了如何使用 RHEL KVM 实例创建 RHCOS 计算机器。这将允许您在集群中添加 s390x
节点,并使用多架构计算机器部署集群。
要使用 x86_64
上的多架构计算机器创建 IBM Z® 或 IBM® LinuxONE (s390x
) 集群,请按照在 IBM Z® 和 IBM® LinuxONE 上安装集群 的说明进行操作。然后,您可以添加 x86_64
计算机器 ,如在裸机、IBM Power 或 IBM Z 上创建带有多架构计算机器的集群中所述。
在集群中添加二级架构节点前,建议安装 Multiarch Tuning Operator,并部署 ClusterPodPlacementConfig
对象。如需更多信息,请参阅使用 Multiarch Tuning Operator 在多架构集群上管理工作负载。
4.8.1. 验证集群兼容性
在开始在集群中添加不同架构的计算节点前,您必须验证集群是否兼容多架构。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
-
登录 OpenShift CLI (
oc
)。 您可以运行以下命令来检查集群是否使用构架有效负载:
$ oc adm release info -o jsonpath="{ .metadata.metadata}"
验证
如果您看到以下输出,代表集群使用多架构有效负载:
{ "release.openshift.io/architecture": "multi", "url": "https://access.redhat.com/errata/<errata_version>" }
然后,您可以开始在集群中添加多架构计算节点。
如果您看到以下输出,代表集群没有使用多架构有效负载:
{ "url": "https://access.redhat.com/errata/<errata_version>" }
重要要迁移集群以便集群支持多架构计算机器,请按照使用多架构计算机器迁移到集群的步骤进行操作。
4.8.2. 使用 virt-install
创建 RHCOS 机器
您可以使用 virt-install
为集群创建更多 Red Hat Enterprise Linux CoreOS (RHCOS)计算机器。
先决条件
- 您至少有一个 LPAR 在 KVM 的 RHEL 8.7 或更高版本中运行,在此过程中称为 RHEL KVM 主机。
- KVM/QEMU 管理程序安装在 RHEL KVM 主机上。
- 您有一个域名服务器(DNS),它可以对节点执行主机名和反向查找。
- 设置了 HTTP 或 HTTPS 服务器。
流程
禁用 UDP 聚合。
目前,IBM Z® 不支持 UDP 聚合,且不会在带有
x86_64
control plane 和其他s390x
计算机器的多架构计算机器上自动取消激活 UDP 聚合。为确保正确在集群中添加额外的计算节点,您必须手动禁用 UDP 聚合。使用以下内容创建 YAML 文件
udp-aggregation-config.yaml
:apiVersion: v1 kind: ConfigMap data: disable-udp-aggregation: "true" metadata: name: udp-aggregation-config namespace: openshift-network-operator
运行以下命令来创建 ConfigMap 资源:
$ oc create -f udp-aggregation-config.yaml
运行以下命令,从集群中删除 Ignition 配置文件:
$ oc extract -n openshift-machine-api secret/worker-user-data-managed --keys=userData --to=- > worker.ign
-
将您从集群导出的
worker.ign
Ignition 配置文件上传到 HTTP 服务器。注意此文件的 URL。 您可以验证 Ignition 文件是否在 URL 上可用。以下示例获取计算节点的 Ignition 配置文件:
$ curl -k http://<HTTP_server>/worker.ign
运行以下命令下载 RHEL live
kernel
、initramfs
和rootfs
文件:$ curl -LO $(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' \ | jq -r '.architectures.s390x.artifacts.metal.formats.pxe.kernel.location')
$ curl -LO $(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' \ | jq -r '.architectures.s390x.artifacts.metal.formats.pxe.initramfs.location')
$ curl -LO $(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' \ | jq -r '.architectures.s390x.artifacts.metal.formats.pxe.rootfs.location')
-
在启动
virt-install
前,将下载的 RHEL livekernel
、initramfs
和rootfs
文件移到 HTTP 或 HTTPS 服务器中。 使用 RHEL
kernel
、initramfs
和 Ignition 文件创建新的 KVM 客户机节点;新磁盘镜像,并调整了 parm 行参数。$ virt-install \ --connect qemu:///system \ --name <vm_name> \ --autostart \ --os-variant rhel9.4 \ 1 --cpu host \ --vcpus <vcpus> \ --memory <memory_mb> \ --disk <vm_name>.qcow2,size=<image_size> \ --network network=<virt_network_parm> \ --location <media_location>,kernel=<rhcos_kernel>,initrd=<rhcos_initrd> \ 2 --extra-args "rd.neednet=1" \ --extra-args "coreos.inst.install_dev=/dev/vda" \ --extra-args "coreos.inst.ignition_url=http://<http_server>/worker.ign " \ 3 --extra-args "coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img" \ 4 --extra-args "ip=<ip>::<gateway>:<netmask>:<hostname>::none" \ 5 --extra-args "nameserver=<dns>" \ --extra-args "console=ttysclp0" \ --noautoconsole \ --wait
- 1
- 对于
os-variant
,为 RHCOS 计算机器指定 RHEL 版本。rhel9.4
是推荐的版本。要查询支持的操作系统的 RHEL 版本,请运行以下命令:$ osinfo-query os -f short-id
注意os-variant
是区分大小写的。 - 2
- 对于
--location
,指定 kernel/initrd 在 HTTP 或 HTTPS 服务器上的位置。 - 3
- 指定
worker.ign
配置文件的位置。仅支持 HTTP 和 HTTPS 协议。 - 4
- 指定您要引导的
kernel
和initramfs
的rootfs
工件位置。仅支持 HTTP 和 HTTPS 协议 - 5
- 可选: 对于
hostname
,指定客户端机器的完全限定主机名。
注意如果您使用 HAProxy 作为负载均衡器,在
/etc/haproxy/haproxy.cfg
配置文件中为ingress-router-443
和ingress-router-80
更新 HAProxy 规则。- 继续为集群创建更多计算机器。
4.8.3. 批准机器的证书签名请求
当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(CSR)。您必须确认这些 CSR 已获得批准,或根据需要自行批准。必须首先批准客户端请求,然后批准服务器请求。
先决条件
- 您已将机器添加到集群中。
流程
确认集群可以识别这些机器:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 63m v1.29.4 master-1 Ready master 63m v1.29.4 master-2 Ready master 64m v1.29.4
输出中列出了您创建的所有机器。
注意在有些 CSR 被批准前,前面的输出可能不包括计算节点(也称为 worker 节点)。
检查待处理的 CSR,并确保添加到集群中的每台机器都有
Pending
或Approved
状态的客户端请求:$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending ...
在本例中,两台机器加入集群。您可能会在列表中看到更多已批准的 CSR。
如果 CSR 没有获得批准,在您添加的机器的所有待处理 CSR 都处于
Pending 状态
后,请批准集群机器的 CSR:注意由于 CSR 会自动轮转,因此请在将机器添加到集群后一小时内批准您的 CSR。如果没有在一小时内批准它们,证书将会轮转,每个节点会存在多个证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 为服务证书创建一个二级 CSR,这需要手动批准。然后,如果 Kubelet 请求具有相同参数的新证书,则后续提供证书续订请求由
machine-approver
自动批准。注意对于在未启用机器 API 的平台上运行的集群,如裸机和其他用户置备的基础架构,您必须实施一种方法来自动批准 kubelet 提供证书请求(CSR)。如果没有批准请求,则
oc exec
、ocrsh
和oc logs
命令将无法成功,因为 API 服务器连接到 kubelet 时需要服务证书。与 Kubelet 端点联系的任何操作都需要此证书批准。该方法必须监视新的 CSR,确认 CSR 由 system:node
或system:admin
组中的node-bootstrapper
服务帐户提交,并确认节点的身份。要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve
注意在有些 CSR 被批准前,一些 Operator 可能无法使用。
现在,您的客户端请求已被批准,您必须查看添加到集群中的每台机器的服务器请求:
$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending ...
如果剩余的 CSR 没有被批准,且处于
Pending
状态,请批准集群机器的 CSR:要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
批准所有客户端和服务器 CSR 后,机器将
处于 Ready 状态
。运行以下命令验证:$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 73m v1.29.4 master-1 Ready master 73m v1.29.4 master-2 Ready master 74m v1.29.4 worker-0 Ready worker 11m v1.29.4 worker-1 Ready worker 11m v1.29.4
注意批准服务器 CSR 后可能需要几分钟时间让机器过渡到
Ready 状态
。
其他信息
- 如需有关 CSR 的更多信息,请参阅 证书签名请求。