$ oc extract -n openshift-machine-api secret/worker-user-data-managed --keys=userData --to=- > worker.ign
您可以在裸机上向 OpenShift Container Platform 集群添加更多计算机器。
如果您无法访问用于创建集群的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像,则可以使用更新版本的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像向 OpenShift Container Platform 集群添加更多计算机器。有关说明,请参阅升级到 OpenShift 4.6+ 后添加新节点到 UPI 集群失败。 |
在向您在裸机基础架构上安装的集群添加更多计算机器之前,必须为此创建 RHCOS 机器。您可以使用 ISO 镜像或网络 PXE 引导来创建机器。
必须使用与安装集群时使用的相同的 ISO 镜像来部署集群中的所有新节点。建议使用相同的 Ignition 配置文件。节点在运行工作负载之前会在第一次启动时自动升级自身。您可以在升级之前或之后添加节点。 |
您可以使用 ISO 镜像创建更多 Red Hat Enterprise Linux CoreOS (RHCOS) 计算机器以用于您的裸机集群。
获取集群计算机器的 Ignition 配置文件的 URL。您在安装过程中将此文件上传到您的 HTTP 服务器。
您必须安装 OpenShift CLI (oc
)。
通过运行以下命令提取集群中的 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
您可以通过运行以下命令访问用于引导新机器的 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')
使用 ISO 文件在更多计算机器上安装 RHCOS。使用您在安装集群之前创建机器时使用的方法
将 ISO 镜像刻录到磁盘并直接引导。
使用 LOM 接口进行 ISO 重定向。
引导 RHCOS ISO 镜像时无需指定任何选项,或中断实时引导序列。等待安装程序引导到 RHCOS 实时环境中的 shell 提示符。
您可以中断 RHCOS 安装引导过程以添加内核参数。但是,对于此 ISO 过程,您必须按照以下步骤中概述的步骤使用 |
运行 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 配置文件,则可以在运行 |
以下示例将引导节点安装初始化到/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
监控机器控制台上RHCOS安装的进度。
在开始OpenShift Container Platform安装之前,确保每个节点上的安装都成功。观察安装过程还可以帮助确定可能出现的RHCOS安装问题的原因。 |
继续为您的集群创建更多计算机器。
您可以使用PXE或iPXE启动为您的裸机集群创建更多Red Hat Enterprise Linux CoreOS (RHCOS)计算机器。
获取集群计算机器的 Ignition 配置文件的 URL。您在安装过程中将此文件上传到您的 HTTP 服务器。
获取在集群安装期间上传到HTTP服务器的RHCOS ISO镜像、压缩金属BIOS、kernel
和initramfs
文件的URL。
您可以访问在安装期间用于为OpenShift Container Platform集群创建机器的PXE启动基础设施。在RHCOS安装到机器上后,机器必须从本地磁盘启动。
如果您使用UEFI,则可以访问在OpenShift Container Platform安装期间修改的grub.conf
文件。
确认您的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_url 和coreos.live.rootfs_url 参数仅支持HTTP和HTTPS。 |
此配置不会在具有图形控制台的机器上启用串行控制台访问。要配置不同的控制台,请向 |
对于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 文件的位置。 |
此配置不会在具有图形控制台的机器上启用串行控制台访问。要配置不同的控制台,请向 |
要在 |
对于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 文件的位置。 |
使用PXE或iPXE基础设施为您的集群创建所需的计算机器。
当您向集群添加机器时,会为每个添加的机器生成两个挂起的证书签名请求 (CSR)。您必须确认这些CSR已获批准,或者如有必要,自行批准它们。必须先批准客户端请求,然后再批准服务器请求。
您已向集群添加了机器。
确认集群是否识别这些机器
$ 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节点)。 |
查看挂起的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请求具有相同参数的新证书,则 |
对于在未启用机器API的平台(例如裸机和其他用户提供的基础设施)上运行的集群,您必须实现一种自动批准kubelet服务证书请求 (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 --no-run-if-empty oc adm certificate approve
在批准一些 CSR 之前,某些操作员可能无法使用。 |
现在您的客户端请求已获批准,您必须查看您添加到集群中的每台机器的服务器请求
$ 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.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 后,机器可能需要几分钟才能转换为 |