×

先决条件

  • 您已在裸机上安装了集群

  • 您拥有用于创建集群的安装介质和 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。如果您没有这些文件,则必须按照安装过程中的说明获取它们。

  • 如果您的用户配置基础架构可以使用 DHCP 服务器,则您已将附加计算机器的详细信息添加到 DHCP 服务器配置中。这包括持久 IP 地址、DNS 服务器信息和每台机器的主机名。

  • 您已更新 DNS 配置以包含您正在添加的每台计算机器的记录名称和 IP 地址。您已验证 DNS 查询和反向 DNS 查询是否正确解析。

如果您无法访问用于创建集群的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像,则可以使用更新版本的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像向 OpenShift Container Platform 集群添加更多计算机器。有关说明,请参阅升级到 OpenShift 4.6+ 后添加新节点到 UPI 集群失败

创建 Red Hat Enterprise Linux CoreOS (RHCOS) 机器

在向您在裸机基础架构上安装的集群添加更多计算机器之前,必须为此创建 RHCOS 机器。您可以使用 ISO 镜像或网络 PXE 引导来创建机器。

必须使用与安装集群时使用的相同的 ISO 镜像来部署集群中的所有新节点。建议使用相同的 Ignition 配置文件。节点在运行工作负载之前会在第一次启动时自动升级自身。您可以在升级之前或之后添加节点。

使用 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 如果您使用多个网卡,请在ip选项中指定单个接口。例如,要在名为eno1的网卡上使用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 如果您使用多个网卡,请在ip选项中指定单个接口。例如,要在名为eno1的网卡上使用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之前,上述输出可能不包括计算节点(也称为worker节点)。

  2. 查看挂起的CSR,并确保您看到您添加到集群的每台机器的客户端请求的状态为PendingApproved

    $ 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 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 未获批准,并且状态为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(就绪)状态。

更多信息