5.11. 安装 RHCOS 并启动 OpenShift Container Platform bootstrap 过程
要在您置备的 IBM Z® 基础架构上安装 OpenShift Container Platform,您必须将 Red Hat Enterprise Linux CoreOS(RHCOS)安装为 Red Hat Enterprise Linux(RHEL)客户机虚拟机。安装 RHCOS 时,您必须为您要安装的机器类型提供 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。如果您配置了适当的网络、DNS 和负载均衡基础架构,OpenShift Container Platform bootstrap 过程会在 RHCOS 机器重启后自动启动。
您可以使用预打包的 QEMU 写时复制(QCOW2)磁盘镜像对 RHCOS 执行快速跟踪安装。或者,您可以在新 QCOW2 磁盘镜像上执行完整安装。
要在系统中添加更多安全性,您可以选择使用 IBM® Secure Execution 安装 RHCOS,然后才能继续快速跟踪安装。
5.11.1. 使用 IBM 安全执行安装 RHCOS
在使用 IBM® Secure Execution 安装 RHCOS 前,您必须准备底层基础架构。
先决条件
- IBM® z15 或更高版本,或 IBM® LinuxONE114 或更高版本。
- Red Hat Enterprise Linux (RHEL) 8 或更高版本。
- 您有一个 bootstrap Ignition 文件。该文件不受保护,其他人能够查看和编辑它。
- 您已确认引导镜像在安装后没有更改。
- 您必须以 IBM® Secure Execution 客户机身份运行所有节点。
流程
准备 RHEL KVM 主机以支持 IBM® 安全执行。
默认情况下,KVM 主机不支持 IBM® 安全执行模式中的客户机。要在 IBM® Secure Execution 模式中支持客户机,KVM 主机必须使用内核参数规格
prot_virt=1
在 LPAR 模式中引导。要在 RHEL 8 上启用prot_virt=1
,请按照以下步骤执行:-
进入到
/boot/loader/entries/
,以修改您的引导装载程序配置文件slirpconf
。 -
添加内核命令行参数
prot_virt=1
。 运行
zipl
命令并重启系统。从支持 IBM® Secure Execution 开始的 KVM 主机发出以下内核信息:
prot_virt: Reserving <amount>MB as ultravisor base storage.
要验证 KVM 主机现在支持 IBM® Secure Execution,请运行以下命令:
# cat /sys/firmware/uv/prot_virt_host
输出示例
1
对于 Linux 实例,此属性的值是 1,它检测其环境与安全主机的一致性。对于其他实例,值为 0。
-
进入到
通过 Ignition 将您的主机密钥添加到 KVM 客户机。
第一次引导过程中,RHCOS 会查找主机密钥以使用它们重新加密自身。RHCOS 在
/etc/se-hostkeys
目录中搜索以ibm-z-hostkey-
开头的文件。集群运行的每台机器的所有主机密钥都必须由管理员加载到目录中。首次启动后,您无法在任何其他机器上运行虚拟机。注意您需要在安全系统上准备 Ignition 文件。例如,另一个 IBM® Secure Execution 客户机。
例如:
{ "ignition": { "version": "3.0.0" }, "storage": { "files": [ { "path": "/etc/se-hostkeys/ibm-z-hostkey-<your-hostkey>.crt", "contents": { "source": "data:;base64,<base64 encoded hostkey document>" }, "mode": 420 }, { "path": "/etc/se-hostkeys/ibm-z-hostkey-<your-hostkey>.crt", "contents": { "source": "data:;base64,<base64 encoded hostkey document>" }, "mode": 420 } ] } } ```
注意如果您希望节点能够在多个 IBM Z® 机器上运行,您可以根据需要添加任意数量的主机密钥。
要生成 Base64 编码字符串,请运行以下命令:
base64 <your-hostkey>.crt
与不运行 IBM® Secure Execution 的客户机相比,机器的第一次引导将较长,因为整个镜像在 Ignition 阶段之前使用随机生成的 LUKS 密码短语进行加密。
添加 Ignition 保护
为了保护存储在 Ignition 配置文件中的 secret 被读取或修改,您必须加密 Ignition 配置文件。
注意为了实现所需的安全性,在运行 IBM® Secure Execution 时默认禁用 Ignition 日志记录和本地登录。
运行以下命令,获取
secex-qemu.qcow2
镜像的公共 GPG 密钥,并使用密钥加密 Ignition 配置:gpg --recipient-file /path/to/ignition.gpg.pub --yes --output /path/to/config.ign.gpg --verbose --armor --encrypt /path/to/config.ign
按照 RHCOS 的 fast-track 安装步骤,使用 IBM® Secure Execution QCOW 镜像安装节点。
注意在启动虚拟机前,请将
serial=ignition
替换为serial=ignition_crypted
,并添加launchSecurity
参数。
验证
当您完成 RHCOS 的快速跟踪安装,以及 Ignition 在第一次引导时运行后,验证解密是否成功。
如果解密成功,您可以预期类似以下示例的输出:
输出示例
[ 2.801433] systemd[1]: Starting coreos-ignition-setup-user.service - CoreOS Ignition User Config Setup... [ 2.803959] coreos-secex-ignition-decrypt[731]: gpg: key <key_name>: public key "Secure Execution (secex) 38.20230323.dev.0" imported [ 2.808874] coreos-secex-ignition-decrypt[740]: gpg: encrypted with rsa4096 key, ID <key_name>, created <yyyy-mm-dd> [ OK ] Finished coreos-secex-igni…S Secex Ignition Config Decryptor.
如果解密失败,您可以预期类似以下示例的输出:
输出示例
Starting coreos-ignition-s…reOS Ignition User Config Setup... [ 2.863675] coreos-secex-ignition-decrypt[729]: gpg: key <key_name>: public key "Secure Execution (secex) 38.20230323.dev.0" imported [ 2.869178] coreos-secex-ignition-decrypt[738]: gpg: encrypted with RSA key, ID <key_name> [ 2.870347] coreos-secex-ignition-decrypt[738]: gpg: public key decryption failed: No secret key [ 2.870371] coreos-secex-ignition-decrypt[738]: gpg: decryption failed: No secret key
5.11.2. 在 IBM Z 或 IBM LinuxONE 环境中使用静态 IP 配置 NBDE
在 IBM Z® 或 IBM® LinuxONE 环境中启用 NBDE 磁盘加密需要额外的步骤,本节中详细介绍。
先决条件
- 您已设置了外部 Tang 服务器。具体步骤请查看 网络绑定磁盘加密。
-
您已安装了 with
ane
实用程序。 - 您已查看如何使用 Butane 创建机器配置的说明。
流程
为 control plane 和计算节点创建 Butane 配置文件。
以下 control plane 节点的 Butane 配置示例为磁盘加密创建一个名为
master-storage.bu
的文件:variant: openshift version: 4.15.0 metadata: name: master-storage labels: machineconfiguration.openshift.io/role: master storage: luks: - clevis: tang: - thumbprint: QcPr_NHFJammnRCA3fFMVdNBwjs url: http://clevis.example.com:7500 options: 1 - --cipher - aes-cbc-essiv:sha256 device: /dev/disk/by-partlabel/root label: luks-root name: root wipe_volume: true filesystems: - device: /dev/mapper/root format: xfs label: root wipe_filesystem: true openshift: fips: true 2
运行以下命令,创建自定义 initramfs 文件来引导机器:
$ coreos-installer pxe customize \ /root/rhcos-bootfiles/rhcos-<release>-live-initramfs.s390x.img \ --dest-device /dev/disk/by-id/scsi-<serial_number> --dest-karg-append \ ip=<ip_address>::<gateway_ip>:<subnet_mask>::<network_device>:none \ --dest-karg-append nameserver=<nameserver_ip> \ --dest-karg-append rd.neednet=1 -o \ /root/rhcos-bootfiles/<node_name>-initramfs.s390x.img
注意首次引导前,您必须为集群中的每个节点自定义 initramfs,并添加 PXE 内核参数。
-
创建包含
ignition.platform.id=metal
和ignition.firstboot
的参数文件。
rd.neednet=1 \ console=ttysclp0 \ ignition.firstboot ignition.platform.id=metal \ coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img \1 coreos.inst.ignition_url=http://<http_server>/master.ign \2 ip=10.19.17.2::10.19.17.1:255.255.255.0::enbdd0:none nameserver=10.19.17.1 \ zfcp.allow_lun_scan=0 \ rd.znet=qeth,0.0.bdd0,0.0.bdd1,0.0.bdd2,layer2=1 \ rd.zfcp=0.0.5677,0x600606680g7f0056,0x034F000000000000
其他资源
5.11.3. 使用预打包的 QCOW2 磁盘镜像快速跟踪安装
完成以下步骤,在 Red Hat Enterprise Linux CoreOS(RHCOS)快速跟踪安装中创建机器,导入预打包的 Red Hat Enterprise Linux CoreOS(RHCOS)QEMU 写时复制(QCOW2)磁盘镜像。
先决条件
- 至少有一个 LPAR 在 KVM 的 RHEL 8.6 或更高版本中运行,在此过程中称为 RHEL KVM 主机。
- KVM/QEMU 管理程序安装在 RHEL KVM 主机上。
- 一个域名服务器(DNS),它可以对节点执行主机名和反向查找。
- 提供 IP 地址的 DHCP 服务器。
流程
从红帽客户门户网站的产品下载页或 RHCOS image mirror 页获得 RHEL QEMU copy-on-write (QCOW2) 磁盘镜像。
重要RHCOS 镜像可能不会随着 OpenShift Container Platform 的每个发行版本而改变。您必须下载最高版本的镜像,其版本号应小于或等于您安装的 OpenShift Container Platform 版本。仅使用以下流程中描述的适当 RHCOS QCOW2 镜像。
将 QCOW2 磁盘镜像和 Ignition 文件下载到 RHEL KVM 主机上的通用目录中。
例如:
/var/lib/libvirt/images
注意Ignition 文件由 OpenShift Container Platform 安装程序生成。
为每个 KVM 客户机节点使用 QCOW2 磁盘镜像文件创建新磁盘镜像。
$ qemu-img create -f qcow2 -F qcow2 -b /var/lib/libvirt/images/{source_rhcos_qemu} /var/lib/libvirt/images/{vmname}.qcow2 {size}
使用 Ignition 文件和新磁盘镜像创建新的 KVM 客户机节点。
$ virt-install --noautoconsole \ --connect qemu:///system \ --name {vm_name} \ --memory {memory} \ --vcpus {vcpus} \ --disk {disk} \ --launchSecurity type="s390-pv" \ 1 --import \ --network network={network},mac={mac} \ --disk path={ign_file},format=raw,readonly=on,serial=ignition,startup_policy=optional 2
5.11.4. 在新 QCOW2 磁盘镜像上完全安装
完成以下步骤,在新的 QEMU 写时复制(QCOW2)磁盘镜像上在完整安装中创建机器。
先决条件
- 至少有一个 LPAR 在 KVM 的 RHEL 8.6 或更高版本中运行,在此过程中称为 RHEL KVM 主机。
- KVM/QEMU 管理程序安装在 RHEL KVM 主机上。
- 一个域名服务器(DNS),它可以对节点执行主机名和反向查找。
- 设置了 HTTP 或 HTTPS 服务器。
流程
从红帽客户门户网站的产品下载页或 RHCOS image mirror 页获取 RHEL kernel, initramfs, 和 rootfs 文件。
重要RHCOS 镜像可能不会随着 OpenShift Container Platform 的每个发行版本而改变。您必须下载最高版本的镜像,其版本号应小于或等于您安装的 OpenShift Container Platform 版本。仅使用以下流程中描述的适当 RHCOS QCOW2 镜像。
文件名包含 OpenShift Container Platform 版本号。它们类似以下示例:
-
kernel:
rhcos-<version>-live-kernel-<architecture>
-
initramfs:
rhcos-<version>-live-initramfs.<architecture>.img
-
rootfs:
rhcos-<version>-live-rootfs.<architecture>.img
-
kernel:
在启动
virt-install
前,将下载的 RHEL live kernel、initramfs 和 rootfs 以及 Ignition 文件移到 HTTP 或 HTTPS 服务器中。注意Ignition 文件由 OpenShift Container Platform 安装程序生成。
使用 RHEL 内核、initramfs 和 Ignition 文件、新磁盘镜像并调整 parm 行参数,创建新的 KVM 客户机节点。
-
对于
--location
,指定 kernel/initrd 在 HTTP 或 HTTPS 服务器上的位置。 -
对于
coreos.inst.ignition_url=
,请为机器角色指定 Ignition 文件。使用bootstrap.ign
、master.ign
或worker.ign
。仅支持 HTTP 和 HTTPS 协议。 对于
coreos.live.rootfs_url=
,请为您引导的内核和 initramfs 指定匹配的 rootfs 构件。仅支持 HTTP 和 HTTPS 协议。$ virt-install \ --connect qemu:///system \ --name {vm_name} \ --vcpus {vcpus} \ --memory {memory_mb} \ --disk {vm_name}.qcow2,size={image_size| default(10,true)} \ --network network={virt_network_parm} \ --boot hd \ --location {media_location},kernel={rhcos_kernel},initrd={rhcos_initrd} \ --extra-args "rd.neednet=1 coreos.inst.install_dev=/dev/vda coreos.live.rootfs_url={rhcos_liveos} ip={ip}::{default_gateway}:{subnet_mask_length}:{vm_name}:enc1:none:{MTU} nameserver={dns} coreos.inst.ignition_url={rhcos_ign}" \ --noautoconsole \ --wait
-
对于
5.11.5. 高级 RHCOS 安装参考
本节演示了网络配置和其他高级选项,允许您修改 Red Hat Enterprise Linux CoreOS(RHCOS)手动安装过程。下表描述了您可以用于 RHCOS live 安装程序和 coreos-installer
命令的内核参数和命令行选项。
5.11.5.1. ISO 安装的网络选项
如果从 ISO 镜像安装 RHCOS,您可以在引导镜像时手动添加内核参数,以便为节点配置网络。如果没有指定网络参数,当 RHCOS 检测到需要网络来获取 Ignition 配置文件时,在 initramfs 中激活 DHCP。
在手动添加网络参数时,还必须添加 rd.neednet=1
内核参数,以便在 initramfs 中启动网络。
以下信息提供了在 RHCOS 节点上为 ISO 安装配置网络的示例。示例描述了如何使用 ip=
和 nameserver=
内核参数。
在添加内核参数时,顺序非常重要:ip=
和 nameserver=
。
网络选项在系统引导过程中传递给 dracut
工具。有关由 dracut
支持的网络选项的更多信息,请参阅 dracut.cmdline
手册页。
以下示例是 ISO 安装的网络选项。
配置 DHCP 或静态 IP 地址
要配置 IP 地址,可使用 DHCP(ip=dhcp
)或设置单独的静态 IP 地址(ip=<host_ip>
)。如果设置静态 IP,则必须在每个节点上识别 DNS 服务器 IP 地址(名称服务器=<dns_ip>
)。以下示例集:
-
节点的 IP 地址为
10.10.10.2
-
网关地址为
10.10.10.254
-
子网掩码为
255.255.255.0
-
到
core0.example.com
的主机名 -
DNS 服务器地址为
4.4.4.41
-
自动配置值为
none
。当以静态方式配置 IP 网络时,不需要自动配置。
ip=10.10.10.2::10.10.10.254:255.255.255.0:core0.example.com:enp1s0:none nameserver=4.4.4.41
当您使用 DHCP 为 RHCOS 机器配置 IP 寻址时,机器还通过 DHCP 获取 DNS 服务器信息。对于基于 DHCP 的部署,您可以通过 DHCP 服务器配置定义 RHCOS 节点使用的 DNS 服务器地址。
配置没有静态主机名的 IP 地址
您可以在不分配静态主机名的情况下配置 IP 地址。如果用户没有设置静态主机名,则会提取并通过反向 DNS 查找自动设置。要在没有静态主机名的情况下配置 IP 地址,请参考以下示例:
-
节点的 IP 地址为
10.10.10.2
-
网关地址为
10.10.10.254
-
子网掩码为
255.255.255.0
-
DNS 服务器地址为
4.4.4.41
-
自动配置值为
none
。当以静态方式配置 IP 网络时,不需要自动配置。
ip=10.10.10.2::10.10.10.254:255.255.255.0::enp1s0:none nameserver=4.4.4.41
指定多个网络接口
您可以通过设置多个 ip=
条目来指定多个网络接口。
ip=10.10.10.2::10.10.10.254:255.255.255.0:core0.example.com:enp1s0:none ip=10.10.10.3::10.10.10.254:255.255.255.0:core0.example.com:enp2s0:none
配置默认网关和路由
可选:您可以通过设置 a rd.route=
值来配置到额外网络的路由。
当您配置一个或多个网络时,需要一个默认网关。如果额外网络网关与主要网络网关不同,则默认网关必须是主要网络网关。
运行以下命令来配置默认网关:
ip=::10.10.10.254::::
输入以下命令为额外网络配置路由:
rd.route=20.20.20.0/24:20.20.20.254:enp2s0
在单个接口中禁用 DHCP
您可以在单一接口中禁用 DHCP,例如当有两个或者多个网络接口时,且只有一个接口被使用。在示例中,enp1s0
接口具有一个静态网络配置,而 enp2s0
禁用了 DHCP,不使用它:
ip=10.10.10.2::10.10.10.254:255.255.255.0:core0.example.com:enp1s0:none ip=::::core0.example.com:enp2s0:none
合并 DHCP 和静态 IP 配置
您可以将系统上的 DHCP 和静态 IP 配置与多个网络接口合并,例如:
ip=enp1s0:dhcp ip=10.10.10.2::10.10.10.254:255.255.255.0:core0.example.com:enp2s0:none
在独立接口上配置 VLAN
可选: 您可以使用 vlan=
参数在单个接口上配置 VLAN。
要在网络接口中配置 VLAN 并使用静态 IP 地址,请运行以下命令:
ip=10.10.10.2::10.10.10.254:255.255.255.0:core0.example.com:enp2s0.100:none vlan=enp2s0.100:enp2s0
要在网络接口中配置 VLAN 并使用 DHCP,请运行以下命令:
ip=enp2s0.100:dhcp vlan=enp2s0.100:enp2s0
提供多个 DNS 服务器
您可以通过为每个服务器添加一个 nameserver=
条目来提供多个 DNS 服务器,例如
nameserver=1.1.1.1 nameserver=8.8.8.8