×

要在 IBM Z® 和 IBM® LinuxONE (s390x) 上使用 RHEL KVM 创建具有多架构计算机的集群,您必须拥有现有的单架构 x86_64 集群。然后,您可以将 s390x 计算机器添加到您的 OpenShift Container Platform 集群。

在您可以将 s390x 节点添加到集群之前,必须将集群升级到使用多架构有效负载的集群。有关迁移到多架构有效负载的更多信息,请参阅 迁移到具有多架构计算机的集群

以下过程说明了如何使用 RHEL KVM 实例创建 RHCOS 计算机器。这将允许您将 s390x 节点添加到集群并部署具有多架构计算机的集群。

要在 x86_64 上创建具有多架构计算机的 IBM Z® 或 IBM® LinuxONE (s390x) 集群,请按照 在 IBM Z® 和 IBM® LinuxONE 上安装集群 中的说明进行操作。然后,您可以按照 在裸机、IBM Power 或 IBM Z 上创建具有多架构计算机的集群 中的说明添加 x86_64 计算机器。

在将辅助架构节点添加到集群之前,建议安装 Multiarch Tuning Operator 并部署 ClusterPodPlacementConfig 对象。有关更多信息,请参阅 使用 Multiarch Tuning Operator 管理多架构集群上的工作负载

验证集群兼容性

在您可以开始将不同架构的计算节点添加到集群之前,必须验证您的集群是否与多架构兼容。

先决条件
  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 登录到 OpenShift CLI (oc)。

  2. 您可以通过运行以下命令来检查您的集群是否使用多架构有效负载

    $ 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>"
    }

    要迁移集群以便集群支持多架构计算机器,请按照 迁移到具有多架构计算机的集群 中的过程进行操作。

使用 `virt-install` 创建 RHCOS 机器

您可以使用 `virt-install` 为您的集群创建更多 Red Hat Enterprise Linux CoreOS (RHCOS) 计算机器。

先决条件
  • 您至少有一个在 RHEL 8.7 或更高版本上运行并具有 KVM 的 LPAR,在此过程中称为 RHEL KVM 主机。

  • KVM/QEMU 虚拟机监控程序已安装在 RHEL KVM 主机上。

  • 您有一个域名服务器 (DNS),可以为节点执行主机名和反向查找。

  • 已设置 HTTP 或 HTTPS 服务器。

步骤
  1. 禁用 UDP 聚合。

    目前,IBM Z® 不支持 UDP 聚合,并且在具有x86_64控制平面和附加s390x计算机的多架构计算集群上不会自动停用。为确保附加的计算节点正确添加到集群中,您必须手动禁用 UDP 聚合。

    1. 创建一个名为udp-aggregation-config.yaml的 YAML 文件,内容如下:

      apiVersion: v1
      kind: ConfigMap
      data:
        disable-udp-aggregation: "true"
      metadata:
        name: udp-aggregation-config
        namespace: openshift-network-operator
    2. 运行以下命令创建 ConfigMap 资源:

      $ oc create -f udp-aggregation-config.yaml
  2. 运行以下命令从集群中提取 Ignition 配置文件:

    $ oc extract -n openshift-machine-api secret/worker-user-data-managed --keys=userData --to=- > worker.ign
  3. 将您从集群导出的worker.ign Ignition 配置文件上传到您的 HTTP 服务器。记下此文件的 URL。

  4. 您可以验证 Ignition 文件是否在 URL 上可用。以下示例获取计算节点的 Ignition 配置文件:

    $ curl -k http://<HTTP_server>/worker.ign
  5. 运行以下命令下载 RHEL 实时kernelinitramfsrootfs文件:

     $ 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')
  6. 在启动virt-install之前,将下载的 RHEL 实时kernelinitramfsrootfs文件移动到 HTTP 或 HTTPS 服务器。

  7. 使用 RHEL kernelinitramfs和 Ignition 文件;新的磁盘映像;以及调整后的参数行参数创建新的 KVM 虚拟机节点。

    $ 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,请指定 HTTP 或 HTTPS 服务器上内核/initrd 的位置。
    3 指定worker.ign配置文件的位置。仅支持 HTTP 和 HTTPS 协议。
    4 指定您正在引导的kernelinitramfsrootfs工件的位置。仅支持 HTTP 和 HTTPS 协议。
    5 可选:对于hostname,请指定客户端机器的完全限定主机名。

    如果您使用 HAProxy 作为负载均衡器,请更新/etc/haproxy/haproxy.cfg配置文件中ingress-router-443ingress-router-80的 HAProxy 规则。

  8. 继续为您的集群创建更多计算机器。

批准您机器的证书签名请求

当您将机器添加到集群时,会为每个添加的机器生成两个待处理的证书签名请求 (CSR)。您必须确认这些 CSR 已获批准,或者如有必要,自行批准它们。必须先批准客户端请求,然后才能批准服务器请求。

先决条件
  • 您已将机器添加到集群。

步骤
  1. 确认集群是否识别这些机器

    $ oc get nodes
    示例输出
    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  63m  v1.30.3
    master-1  Ready     master  63m  v1.30.3
    master-2  Ready     master  64m  v1.30.3

    输出列出了您创建的所有机器。

    在批准一些 CSR 之前,上述输出可能不包含计算节点(也称为工作节点)。

  2. 查看待处理的 CSR,并确保您看到每个添加到集群的机器的客户端请求的状态为“待处理”或“已批准”。

    $ 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。

  3. 如果 CSR 未获批准,在您添加的所有机器的待处理 CSR 状态均为“待处理”后,请批准集群机器的 CSR。

    由于 CSR 会自动轮换,因此请在将机器添加到集群后一小时内批准您的 CSR。如果您在一小时内未批准它们,证书将轮换,并且每个节点将存在两个以上的证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 会为服务证书创建第二个 CSR,这需要手动批准。然后,如果 Kubelet 使用相同的参数请求新证书,则machine-approver会自动批准后续的服务证书续订请求。

    对于在未启用机器 API 的平台(例如裸机和其他用户预配的基础设施)上运行的集群,您必须实现一种自动批准 kubelet 服务证书请求 (CSR) 的方法。如果未批准请求,则oc execoc rshoc logs命令将无法成功,因为 API 服务器连接到 kubelet 时需要服务证书。任何联系 Kubelet 端点的操作都需要此证书批准到位。该方法必须监视新的 CSR,确认 CSR 是由system:nodesystem: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 之前,某些操作员可能无法使用。

  4. 现在您的客户端请求已获批准,您必须查看添加到集群的每台机器的服务器请求。

    $ 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
    ...
  5. 如果其余 CSR 未获批准,并且状态为“待处理”,请批准集群机器的 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
  6. 批准所有客户端和服务器 CSR 后,机器将具有“就绪”状态。通过运行以下命令来验证这一点:

    $ oc get nodes
    示例输出
    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  73m  v1.30.3
    master-1  Ready     master  73m  v1.30.3
    master-2  Ready     master  74m  v1.30.3
    worker-0  Ready     worker  11m  v1.30.3
    worker-1  Ready     worker  11m  v1.30.3

    批准服务器 CSR 后,机器可能需要几分钟才能转换为“就绪”状态。

附加信息