×

要创建在裸机上具有多架构计算机的集群(x86_64aarch64)、IBM Power®(ppc64le)或 IBM Z®(s390x),您必须在这些平台之一上拥有现有的单架构集群。请按照您平台的安装程序进行操作。

裸机安装程序预配的基础架构和裸机运算符不支持在初始集群设置期间添加辅助架构节点。只有在初始集群设置之后才能手动添加辅助架构节点。

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

以下过程说明如何使用 ISO 镜像或网络 PXE 启动创建 RHCOS 计算机器。这允许您向集群添加其他节点并部署具有多架构计算机的集群。

在将辅助架构节点添加到集群之前,建议安装 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>"
    }

    要迁移集群以使其支持多架构计算机器,请按照迁移到具有多架构计算机的集群中的步骤操作。

使用ISO映像创建RHCOS机器

您可以使用ISO映像创建更多Red Hat Enterprise Linux CoreOS (RHCOS)计算机器,用于您的裸机集群。

先决条件
  • 获取集群计算机器的Ignition配置文件的URL。您在安装过程中将此文件上传到了您的HTTP服务器。

  • 您必须安装OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令提取集群中的Ignition配置文件:

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

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

    $ curl -k http://<HTTP_server>/worker.ign
  4. 您可以通过运行以下命令访问用于引导新机器的ISO映像:

    RHCOS_VHD_ORIGIN_URL=$(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' | jq -r '.architectures.<architecture>.artifacts.metal.formats.iso.disk.location')
  5. 使用ISO文件在更多计算机器上安装RHCOS。使用安装集群之前创建机器时使用的方法。

    • 将ISO映像刻录到磁盘并直接引导。

    • 使用带有LOM接口的ISO重定向。

  6. 引导RHCOS ISO映像,无需指定任何选项或中断实时引导序列。等待安装程序引导到RHCOS实时环境中的shell提示符。

    您可以中断RHCOS安装引导过程以添加内核参数。但是,对于此ISO过程,您必须使用以下步骤中概述的coreos-installer命令,而不是添加内核参数。

  7. 运行coreos-installer命令并指定满足您的安装要求的选项。至少,您必须指定指向节点类型Ignition配置文件的URL以及要安装到的设备。

    $ sudo coreos-installer install --ignition-url=http://<HTTP_server>/<node_type>.ign <device> --ignition-hash=sha512-<digest> (1) (2)
    1 您必须使用sudo运行coreos-installer命令,因为core用户没有执行安装所需的root权限。
    2 当通过HTTP URL获取Ignition配置文件时,需要--ignition-hash选项来验证集群节点上Ignition配置文件的真实性。<digest>是在前面步骤中获得的Ignition配置文件SHA512摘要。

    如果您想通过使用TLS的HTTPS服务器提供Ignition配置文件,则可以在运行coreos-installer之前将内部证书颁发机构(CA)添加到系统信任库。

    以下示例将引导节点安装初始化到/dev/sda设备。引导节点的Ignition配置文件是从IP地址为192.168.1.2的HTTP Web服务器获取的。

    $ sudo coreos-installer install --ignition-url=http://192.168.1.2:80/installation_directory/bootstrap.ign /dev/sda --ignition-hash=sha512-a5a2d43879223273c9b60af66b44202a1d1248fc01cf156c46d4a79f552b6bad47bc8cc78ddf0116e80c59d2ea9e32ba53bc807afbca581aa059311def2c3e3b
  8. 监控机器控制台上RHCOS安装的进度。

    在开始OpenShift Container Platform安装之前,请确保每个节点上的安装都成功。观察安装过程还可以帮助确定可能出现的RHCOS安装问题的原因。

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

通过PXE或iPXE引导创建RHCOS机器

您可以使用PXE或iPXE引导为您的裸机集群创建更多Red Hat Enterprise Linux CoreOS (RHCOS)计算机器。

先决条件
  • 获取集群计算机器的Ignition配置文件的URL。您在安装过程中将此文件上传到了您的HTTP服务器。

  • 获取您在集群安装过程中上传到HTTP服务器的RHCOS ISO映像、压缩金属BIOS、kernelinitramfs文件的URL。

  • 您可以访问在安装过程中用于为OpenShift Container Platform集群创建机器的PXE引导基础架构。在RHCOS安装到机器上之后,机器必须从本地磁盘引导。

  • 如果您使用UEFI,则可以访问您在OpenShift Container Platform安装期间修改的grub.conf文件。

步骤
  1. 确认RHCOS映像的PXE或iPXE安装正确。

    • 对于PXE

      DEFAULT pxeboot
      TIMEOUT 20
      PROMPT 0
      LABEL pxeboot
          KERNEL http://<HTTP_server>/rhcos-<version>-live-kernel-<architecture> (1)
          APPEND initrd=http://<HTTP_server>/rhcos-<version>-live-initramfs.<architecture>.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://<HTTP_server>/worker.ign coreos.live.rootfs_url=http://<HTTP_server>/rhcos-<version>-live-rootfs.<architecture>.img (2)
      1 指定您上传到HTTP服务器的实时kernel文件的位置。
      2 指定您上传到HTTP服务器的RHCOS文件的位置。initrd参数值是实时initramfs文件的位置,coreos.inst.ignition_url参数值是worker Ignition配置文件的位置,coreos.live.rootfs_url参数值是实时rootfs文件的位置。coreos.inst.ignition_urlcoreos.live.rootfs_url参数仅支持HTTP和HTTPS。

      此配置不会在具有图形控制台的机器上启用串行控制台访问。要配置不同的控制台,请向APPEND行添加一个或多个console=参数。例如,添加console=tty0 console=ttyS0可将第一个PC串行端口设置为主控制台,并将图形控制台设置为辅助控制台。更多信息,请参见如何在Red Hat Enterprise Linux中设置串行终端和/或控制台?

    • 对于iPXE (x86_64 + aarch64)

      kernel http://<HTTP_server>/rhcos-<version>-live-kernel-<architecture> initrd=main coreos.live.rootfs_url=http://<HTTP_server>/rhcos-<version>-live-rootfs.<architecture>.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://<HTTP_server>/worker.ign (1) (2)
      initrd --name main http://<HTTP_server>/rhcos-<version>-live-initramfs.<architecture>.img (3)
      boot
      1 指定您上传到HTTP服务器的RHCOS文件的位置。kernel参数值是kernel文件的位置,initrd=main参数对于在UEFI系统上引导是必需的,coreos.live.rootfs_url参数值是rootfs文件的位置,coreos.inst.ignition_url参数值是worker Ignition配置文件的位置。
      2 如果您使用多个NIC,请在ip选项中指定单个接口。例如,要在名为eno1的NIC上使用DHCP,请设置ip=eno1:dhcp
      3 指定您上传到HTTP服务器的initramfs文件的位置。

      此配置不会在具有图形控制台的机器上启用串行控制台访问。要配置不同的控制台,请向kernel行添加一个或多个console=参数。例如,添加console=tty0 console=ttyS0可将第一个PC串行端口设置为主控制台,并将图形控制台设置为辅助控制台。更多信息,请参见如何在Red Hat Enterprise Linux中设置串行终端和/或控制台?以及“高级RHCOS安装配置”部分中的“为PXE和ISO安装启用串行控制台”。

      要在aarch64架构上网络引导CoreOS kernel,您需要使用启用了IMAGE_GZIP选项的iPXE版本构建。请参见iPXE中的IMAGE_GZIP选项

    • 对于aarch64上的PXE(使用UEFI和GRUB作为第二阶段)

      menuentry 'Install CoreOS' {
          linux rhcos-<version>-live-kernel-<architecture>  coreos.live.rootfs_url=http://<HTTP_server>/rhcos-<version>-live-rootfs.<architecture>.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://<HTTP_server>/worker.ign (1) (2)
          initrd rhcos-<version>-live-initramfs.<architecture>.img (3)
      }
      1 指定您上传到HTTP/TFTP服务器的RHCOS文件的位置。kernel参数值是您TFTP服务器上kernel文件的位置。coreos.live.rootfs_url参数值是rootfs文件的位置,coreos.inst.ignition_url参数值是您HTTP服务器上worker Ignition配置文件的位置。
      2 如果您使用多个NIC,请在ip选项中指定单个接口。例如,要在名为eno1的NIC上使用DHCP,请设置ip=eno1:dhcp
      3 指定您上传到TFTP服务器的initramfs文件的位置。
  2. 使用PXE或iPXE基础架构为您的集群创建所需的计算机器。

批准机器的证书签名请求

向集群添加机器时,会为每台添加的机器生成两个待处理的证书签名请求 (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,并确保您看到为添加到集群的每台机器显示 `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。

  3. 如果 CSR 未获批准,则在您添加的机器的所有待处理 CSR 都处于 `Pending` 状态后,批准集群机器的 CSR。

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

    对于在未启用机器 API 的平台(例如裸机和其他用户预配的基础设施)上运行的集群,您必须实现一种自动批准 kubelet 服务证书请求 (CSR) 的方法。如果未批准请求,则 `oc exec`、`oc rsh` 和 `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 之前,某些运算符可能不可用。

  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 未获批准且处于 `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
  6. 批准所有客户端和服务器 CSR 后,机器将具有 `Ready` 状态。通过运行以下命令来验证这一点:

    $ 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 后,机器可能需要几分钟才能过渡到 `Ready` 状态。

附加信息