$ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane --output butane
OpenShift Container Platform同时支持通过Ignition进行集群范围和每台机器的配置,这允许对操作系统进行任意分区和文件内容更改。一般来说,如果Red Hat Enterprise Linux (RHEL)中记录了配置文件,则通过Ignition修改它受支持。
有两种方法可以部署机器配置更改
创建包含在清单文件中的机器配置,以便在openshift-install
期间启动集群。
创建通过机器配置操作器传递给正在运行的OpenShift Container Platform节点的机器配置。
此外,修改参考配置(例如,在安装裸机节点时传递给coreos-installer
的Ignition配置)允许进行每台机器的配置。这些更改目前对机器配置操作器不可见。
以下部分描述了您可能希望以这种方式在节点上配置的功能。
机器配置用于通过指示机器如何创建用户和文件系统、设置网络、安装systemd单元等等来配置控制平面和工作机器。
由于修改机器配置可能很困难,您可以使用Butane配置为您创建机器配置,从而使节点配置变得更容易。
Butane是一个命令行实用程序,OpenShift Container Platform使用它来提供方便的简写语法来编写机器配置,以及执行机器配置的其他验证。Butane接受的Butane配置文件的格式在OpenShift Butane配置规范中定义。
您可以安装Butane工具 (butane
) 以从命令行界面创建OpenShift Container Platform机器配置。您可以通过下载相应的二进制文件在Linux、Windows或macOS上安装butane
。
Butane版本与旧版本以及Fedora CoreOS配置转换器 (FCCT) 向后兼容。 |
导航到Butane镜像下载页面 https://mirror.openshift.com/pub/openshift-v4/clients/butane/.
获取butane
二进制文件
对于最新版本的Butane,将最新的butane
镜像保存到您的当前目录
$ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane --output butane
可选:对于您正在安装Butane的特定类型的架构,例如aarch64或ppc64le,请指示相应的URL。例如
$ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane-aarch64 --output butane
使下载的二进制文件可执行
$ chmod +x butane
将butane
二进制文件移动到PATH
上的目录。
要检查您的PATH
,请打开终端并执行以下命令
$ echo $PATH
您现在可以通过运行butane
命令来使用Butane工具
$ butane <butane_file>
您可以使用Butane生成MachineConfig
对象,以便在安装时或通过机器配置操作器配置工作节点或控制平面节点。
您已安装butane
实用程序。
创建一个Butane配置文件。以下示例创建一个名为99-worker-custom.bu
的文件,该文件将系统控制台配置为显示内核调试消息,并指定chrony时间服务的自定义设置
variant: openshift
version: 4.17.0
metadata:
name: 99-worker-custom
labels:
machineconfiguration.openshift.io/role: worker
openshift:
kernel_arguments:
- loglevel=7
storage:
files:
- path: /etc/chrony.conf
mode: 0644
overwrite: true
contents:
inline: |
pool 0.rhel.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
|
将上一步创建的文件提供给 Butane,以创建一个MachineConfig
对象。
$ butane 99-worker-custom.bu -o ./99-worker-custom.yaml
系统会为您创建一个MachineConfig
对象YAML文件,供您完成机器配置。
保存 Butane 配置,以便将来需要更新MachineConfig
对象。
如果集群尚未运行,请生成清单文件并将MachineConfig
对象YAML文件添加到openshift
目录。如果集群已运行,请按如下方式应用该文件:
$ oc create -f 99-worker-custom.yaml
虽然通常建议将修改内核参数作为第二天活动,但您可能希望在初始集群安装期间将内核参数添加到所有主节点或工作节点。以下是一些您可能希望在集群安装期间添加内核参数的原因,以便它们在系统首次启动之前生效:
您需要在系统启动之前进行一些低级网络配置。
您想禁用某个功能,例如 SELinux,以便它在系统首次启动时不会对其产生影响。
不支持在生产环境中禁用 RHCOS 上的 SELinux。一旦在节点上禁用了 SELinux,必须在重新包含到生产集群之前重新配置它。 |
要将内核参数添加到主节点或工作节点,您可以创建一个MachineConfig
对象并将该对象注入到集群设置期间 Ignition 使用的清单文件集中。
有关可在启动时传递给 RHEL 8 内核的参数列表,请参阅Kernel.org 内核参数。最好仅在需要完成初始 OpenShift Container Platform 安装时才使用此过程添加内核参数。
切换到包含安装程序的目录,并为集群生成 Kubernetes 清单。
$ ./openshift-install create manifests --dir <installation_directory>
决定是否要将内核参数添加到工作节点或控制平面节点。
在openshift
目录中,创建一个文件(例如,99-openshift-machineconfig-master-kargs.yaml
)来定义一个MachineConfig
对象以添加内核设置。此示例将loglevel=7
内核参数添加到控制平面节点。
$ cat << EOF > 99-openshift-machineconfig-master-kargs.yaml
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: master
name: 99-openshift-machineconfig-master-kargs
spec:
kernelArguments:
- loglevel=7
EOF
您可以将master
更改为worker
,以改为将内核参数添加到工作节点。创建单独的 YAML 文件以添加到主节点和工作节点。
现在您可以继续创建集群。
对于大多数常用硬件,Linux 内核包含在计算机启动时使用该硬件所需的设备驱动程序模块。但是,对于某些硬件,Linux 中没有可用的模块。因此,您必须找到一种方法向每个主机计算机提供这些模块。此过程描述了如何在 OpenShift Container Platform 集群中的节点上执行此操作。
首次按照这些说明部署内核模块时,该模块将可用于当前内核。如果安装了新的内核,kmods-via-containers 软件将重建并部署该模块,以便该模块的兼容版本可用于新内核。
此功能能够使模块在每个节点上保持更新的方式是:
向每个节点添加一个 systemd 服务,该服务在启动时启动,以检测是否安装了新内核,并且
如果检测到新内核,则该服务将重建模块并将其安装到内核。
有关此过程所需软件的信息,请参阅kmods-via-containers github 站点。
需要牢记一些重要问题:
此过程为技术预览版。
软件工具和示例尚未以官方 RPM 形式提供,目前只能从过程中提到的非官方github.com
站点获取。
您可能通过这些过程添加的第三方内核模块不受 Red Hat 支持。
在此过程中,构建内核模块所需的软件部署在 RHEL 8 容器中。请记住,当节点获得新内核时,每个节点上的模块都会自动重建。因此,每个节点都需要访问包含重建模块所需的内核和相关软件包的yum
存储库。最好使用有效的 RHEL 订阅提供此内容。
在将内核模块部署到 OpenShift Container Platform 集群之前,您可以在单独的 RHEL 系统上测试该过程。收集内核模块的源代码、KVC 框架和 kmod-via-containers 软件。然后构建和测试模块。要在 RHEL 8 系统上执行此操作,请执行以下操作:
注册 RHEL 8 系统
# subscription-manager register
将订阅附加到 RHEL 8 系统
# subscription-manager attach --auto
安装构建软件和容器所需的软件
# yum install podman make git -y
克隆kmod-via-containers
存储库
为存储库创建一个文件夹
$ mkdir kmods; cd kmods
克隆存储库
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
在您的 RHEL 8 构建主机上安装 KVC 框架实例以测试模块。这将添加一个kmods-via-container
systemd 服务并加载它。
切换到kmod-via-containers
目录
$ cd kmods-via-containers/
安装 KVC 框架实例
$ sudo make install
重新加载 systemd 管理器配置
$ sudo systemctl daemon-reload
获取内核模块源代码。源代码可能用于构建您无法控制但由他人提供的第三方模块。您将需要类似于kvc-simple-kmod
示例中显示的内容,可以将其克隆到您的系统,如下所示:
$ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod
在此示例中,编辑配置文件simple-kmod.conf
文件,并将 Dockerfile 的名称更改为Dockerfile.rhel
。
切换到kvc-simple-kmod
目录
$ cd kvc-simple-kmod
重命名 Dockerfile
$ cat simple-kmod.conf
KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git"
KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel
KMOD_SOFTWARE_VERSION=dd1a7d4
KMOD_NAMES="simple-kmod simple-procfs-kmod"
为您的内核模块创建一个[email protected]
实例,在此示例中为simple-kmod
。
$ sudo make install
启用[email protected]
实例。
$ sudo kmods-via-containers build simple-kmod $(uname -r)
启用并启动 systemd 服务。
$ sudo systemctl enable [email protected] --now
查看服务状态。
$ sudo systemctl status [email protected]
● [email protected] - Kmods Via Containers - simple-kmod
Loaded: loaded (/etc/systemd/system/[email protected];
enabled; vendor preset: disabled)
Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...
要确认内核模块已加载,请使用lsmod
命令列出模块。
$ lsmod | grep simple_
simple_procfs_kmod 16384 0
simple_kmod 16384 0
可选。使用其他方法检查simple-kmod
示例是否有效。
使用dmesg
在内核环形缓冲区中查找“Hello world”消息。
$ dmesg | grep 'Hello world'
[ 6420.761332] Hello world from simple_kmod.
检查/proc
中simple-procfs-kmod
的值。
$ sudo cat /proc/simple-procfs-kmod
simple-procfs-kmod number = 0
运行spkut
命令以从模块获取更多信息。
$ sudo spkut 44
KVC: wrapper simple-kmod for 4.18.0-147.3.1.el8_1.x86_64
Running userspace wrapper using the kernel module container...
+ podman run -i --rm --privileged
simple-kmod-dd1a7d4:4.18.0-147.3.1.el8_1.x86_64 spkut 44
simple-procfs-kmod number = 0
simple-procfs-kmod number = 44
将来,系统启动时,此服务将检查是否正在运行新的内核。如果存在新内核,则服务会构建新版本的内核模块,然后加载它。如果模块已构建,则只需加载它。
根据 OpenShift Container Platform 集群首次启动时是否必须安装内核模块,您可以通过以下两种方式之一设置内核模块的部署:
在集群安装时预配内核模块(第一天):您可以将内容创建为一个MachineConfig
对象,并通过将其与一组清单文件一起包含来提供给openshift-install
。
通过 Machine Config Operator 预配内核模块(第二天):如果您可以在集群启动并运行后添加内核模块,则可以通过 Machine Config Operator (MCO) 部署内核模块软件。
无论哪种情况,每个节点都需要能够在检测到新内核时获取内核包和相关的软件包。您可以通过几种方式设置每个节点以获取该内容。
为每个节点提供 RHEL 授权。
从现有的 RHEL 主机(位于/etc/pki/entitlement
目录)获取 RHEL 授权,并将它们复制到构建 Ignition 配置时提供的其他文件所在的同一位置。
在 Dockerfile 中,添加指向包含内核和其他包的yum
存储库的指针。这必须包括根据需要匹配新安装的内核的新内核包。
通过使用MachineConfig
对象打包内核模块软件,您可以将该软件在安装时或通过 Machine Config Operator 传递给工作节点或控制平面节点。
注册 RHEL 8 系统
# subscription-manager register
将订阅附加到 RHEL 8 系统
# subscription-manager attach --auto
安装构建软件所需的软件
# yum install podman make git -y
创建一个目录来托管内核模块和工具
$ mkdir kmods; cd kmods
获取kmods-via-containers
软件
克隆kmods-via-containers
存储库
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
克隆kvc-simple-kmod
存储库
$ git clone https://github.com/kmods-via-containers/kvc-simple-kmod
获取您的模块软件。在此示例中,使用kvc-simple-kmod
。
创建一个 fakeroot 目录,并使用前面克隆的存储库填充要通过 Ignition 传递的文件。
创建目录
$ FAKEROOT=$(mktemp -d)
切换到kmod-via-containers
目录
$ cd kmods-via-containers
安装 KVC 框架实例
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
切换到kvc-simple-kmod
目录
$ cd ../kvc-simple-kmod
创建实例
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
通过运行以下命令克隆 fakeroot 目录,将所有符号链接替换为其目标的副本:
$ cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree
创建一个 Butane 配置文件99-simple-kmod.bu
,该文件嵌入内核模块树并启用 systemd 服务。
有关 Butane 的信息,请参见“使用 Butane 创建机器配置”。 |
variant: openshift
version: 4.17.0
metadata:
name: 99-simple-kmod
labels:
machineconfiguration.openshift.io/role: worker (1)
storage:
trees:
- local: kmod-tree
systemd:
units:
- name: [email protected]
enabled: true
1 | 要在控制平面节点上部署,请将worker 更改为master 。要在控制平面节点和工作节点上部署,请对每种节点类型执行以下其余说明。 |
使用 Butane 生成一个机器配置 YAML 文件99-simple-kmod.yaml
,其中包含要传递的文件和配置。
$ butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml
如果集群尚未启动,请生成清单文件并将此文件添加到openshift
目录。如果集群已运行,请按如下方式应用该文件:
$ oc create -f 99-simple-kmod.yaml
您的节点将启动[email protected]
服务,并将加载内核模块。
要确认内核模块是否已加载,您可以登录到节点(使用oc debug node/
,然后chroot /host
)。要列出模块,请使用lsmod
命令。
$ lsmod | grep simple_
simple_procfs_kmod 16384 0
simple_kmod 16384 0
在 OpenShift Container Platform 安装期间,您可以在集群节点上启用引导磁盘加密和镜像。
您可以在安装时为控制平面节点和计算节点上的引导磁盘启用加密。OpenShift Container Platform 支持可信平台模块 (TPM) v2 和 Tang 加密模式。
这是首选模式。TPM v2 将密码存储在服务器上的安全加密处理器中。您可以使用此模式来防止在将磁盘从服务器移除后解密集群节点上的引导磁盘数据。
Tang 和 Clevis 是服务器和客户端组件,它们启用基于网络的磁盘加密 (NBDE)。您可以将集群节点上的引导磁盘数据绑定到一个或多个 Tang 服务器。这将防止解密数据,除非节点位于可以访问 Tang 服务器的安全网络上。Clevis 是一个自动解密框架,用于在客户端实现解密。
仅在用户预配的基础架构上的裸机和 vSphere 安装中支持使用 Tang 加密模式加密磁盘。 |
在早期版本的 Red Hat Enterprise Linux CoreOS (RHCOS) 中,磁盘加密是通过在 Ignition 配置中指定/etc/clevis.json
来配置的。在使用 OpenShift Container Platform 4.7 或更高版本创建的集群中,不支持该文件。请使用以下步骤配置磁盘加密。
启用 TPM v2 或 Tang 加密模式后,RHCOS 引导磁盘将使用 LUKS2 格式加密。
此功能
适用于安装程序预配的基础架构、用户预配的基础架构和 Assisted Installer 部署
对于 Assisted Installer 部署
每个集群只能有一种加密方法,Tang 或 TPM
可以在某些节点或所有节点上启用加密
没有 Tang 阈值;所有服务器都必须有效且可运行
加密仅适用于安装磁盘,而不适用于工作负载磁盘
仅在 Red Hat Enterprise Linux CoreOS (RHCOS) 系统上受支持
在清单安装阶段设置磁盘加密,从首次启动开始加密写入磁盘的所有数据
无需用户干预即可提供密码
使用 AES-256-XTS 加密,如果启用 FIPS 模式,则使用 AES-256-CBC 加密
在 OpenShift Container Platform 中,您可以指定对多个 Tang 服务器的要求。您还可以同时配置 TPM v2 和 Tang 加密模式。这仅在存在 TPM 安全加密处理器并且可以通过安全网络访问 Tang 服务器时才启用引导磁盘数据解密。
您可以在 Butane 配置中使用threshold
属性来定义解密发生所需的 TPM v2 和 Tang 加密条件的最小数量。
当通过声明的条件的任何组合达到指定的值时,就会满足阈值。在离线预配的情况下,离线服务器是使用包含的广告访问的,并且仅当在线服务器的数量不满足设置的阈值时才使用该提供的广告。
例如,以下配置中threshold
值为2
可以通过访问两个 Tang 服务器(离线服务器可用作备份)或通过访问 TPM 安全加密处理器和一个 Tang 服务器来达到。
variant: openshift
version: 4.17.0
metadata:
name: worker-storage
labels:
machineconfiguration.openshift.io/role: worker
boot_device:
layout: x86_64 (1)
luks:
tpm2: true (2)
tang: (3)
- url: http://tang1.example.com:7500
thumbprint: jwGN5tRFK-kF6pIX89ssF3khxxX
- url: http://tang2.example.com:7500
thumbprint: VCJsvZFjBSIHSldw78rOrq7h2ZF
- url: http://tang3.example.com:7500
thumbprint: PLjNyRdGw03zlRoGjQYMahSZGu9
advertisement: "{\"payload\": \"...\", \"protected\": \"...\", \"signature\": \"...\"}" (4)
threshold: 2 (5)
openshift:
fips: true
1 | 将此字段设置为集群节点的指令集体系结构。一些示例包括x86_64 、aarch64 或ppc64le 。 |
2 | 如果您要使用可信平台模块 (TPM) 来加密根文件系统,请包含此字段。 |
3 | 如果您要使用一个或多个 Tang 服务器,请包含此部分。 |
4 | 可选:包含此字段以进行离线预配。Ignition 将预配 Tang 服务器绑定,而不是在运行时从服务器获取广告。这允许服务器在预配时不可用。 |
5 | 指定解密发生所需的 TPM v2 和 Tang 加密条件的最小数量。 |
默认的 |
如果需要使用 TPM v2 *和* Tang 进行解密,则 |
在控制平面和工作节点上安装 OpenShift Container Platform 期间,您可以启用引导磁盘和其他磁盘到两个或多个冗余存储设备的镜像。只要有一个设备可用,节点在存储设备故障后仍可继续运行。
镜像不支持替换故障磁盘。重新配置节点以将镜像恢复到原始的、非降级的状态。
对于用户提供的基础设施部署,镜像仅在 RHCOS 系统上可用。镜像支持适用于使用 BIOS 或 UEFI 引导的 |
您可以在 OpenShift Container Platform 安装期间启用和配置加密和镜像。
您已在安装节点上下载了 OpenShift Container Platform 安装程序。
您已在安装节点上安装了 Butane。
Butane 是 OpenShift Container Platform 使用的命令行实用程序,它提供方便的简写语法来编写和验证机器配置。更多信息,请参见“使用 Butane 创建机器配置”。 |
您可以访问一台 Red Hat Enterprise Linux (RHEL) 8 机器,该机器可用于生成 Tang 交换密钥的指纹。
如果要使用 TPM v2 加密集群,请检查是否需要为每个节点的主机固件中启用 TPM v2 加密。大多数戴尔系统都需要此操作。请查看您特定系统的说明书。
如果要使用 Tang 加密集群,请按照以下准备步骤操作
设置 Tang 服务器或访问现有服务器。有关说明,请参见 基于网络的磁盘加密。
如果尚未安装,请在 RHEL 8 机器上安装clevis
软件包。
$ sudo yum install clevis
在 RHEL 8 机器上,运行以下命令以生成交换密钥的指纹。将http://tang1.example.com:7500
替换为您的 Tang 服务器的 URL
$ clevis-encrypt-tang '{"url":"http://tang1.example.com:7500"}' < /dev/null > /dev/null (1)
1 | 在此示例中,tangd.socket 在 Tang 服务器的 7500 端口上监听。 |
|
The advertisement contains the following signing keys:
PLjNyRdGw03zlRoGjQYMahSZGu9 (1)
1 | 交换密钥的指纹。 |
当显示Do you wish to trust these keys? [ynYN]
提示时,输入Y
。
可选:用于离线 Tang 配置
使用curl
命令从服务器获取广告。将http://tang2.example.com:7500
替换为您的 Tang 服务器的 URL
$ curl -f http://tang2.example.com:7500/adv > adv.jws && cat adv.jws
{"payload": "eyJrZXlzIjogW3siYWxnIjogIkV", "protected": "eyJhbGciOiJFUzUxMiIsImN0eSI", "signature": "ADLgk7fZdE3Yt4FyYsm0pHiau7Q"}
向 Clevis 提供广告文件以进行加密
$ clevis-encrypt-tang '{"url":"http://tang2.example.com:7500","adv":"adv.jws"}' < /dev/null > /dev/null
如果节点配置了静态 IP 地址,请运行coreos-installer iso customize --dest-karg-append
或在安装 RHCOS 节点时使用coreos-installer
--append-karg
选项来设置已安装系统的 IP 地址。附加ip=
和其他网络所需的参数。
一些配置静态 IP 的方法不会在第一次启动后影响 initramfs,并且不适用于 Tang 加密。这些方法包括 |
在安装节点上,更改到包含安装程序的目录并生成集群的 Kubernetes 清单
$ ./openshift-install create manifests --dir <installation_directory> (1)
1 | 将<installation_directory> 替换为您要将安装文件存储到的目录的路径。 |
创建一个 Butane 配置文件来配置磁盘加密、镜像或两者。例如,要为计算节点配置存储,请创建一个$HOME/clusterconfig/worker-storage.bu
文件。
variant: openshift
version: 4.17.0
metadata:
name: worker-storage (1)
labels:
machineconfiguration.openshift.io/role: worker (1)
boot_device:
layout: x86_64 (2)
luks: (3)
tpm2: true (4)
tang: (5)
- url: http://tang1.example.com:7500 (6)
thumbprint: PLjNyRdGw03zlRoGjQYMahSZGu9 (7)
- url: http://tang2.example.com:7500
thumbprint: VCJsvZFjBSIHSldw78rOrq7h2ZF
advertisement: "{"payload": "eyJrZXlzIjogW3siYWxnIjogIkV", "protected": "eyJhbGciOiJFUzUxMiIsImN0eSI", "signature": "ADLgk7fZdE3Yt4FyYsm0pHiau7Q"}" (8)
threshold: 1 (9)
mirror: (10)
devices: (11)
- /dev/sda
- /dev/sdb
openshift:
fips: true (12)
1 | 对于控制平面配置,请在这两个位置将worker 替换为master 。 |
2 | 将此字段设置为集群节点的指令集体系结构。一些示例包括x86_64 、aarch64 或ppc64le 。 |
3 | 如果要加密根文件系统,请包含此部分。更多详细信息,请参见“关于磁盘加密”。 |
4 | 如果您要使用可信平台模块 (TPM) 来加密根文件系统,请包含此字段。 |
5 | 如果您要使用一个或多个 Tang 服务器,请包含此部分。 |
6 | 指定 Tang 服务器的 URL。在此示例中,tangd.socket 在 Tang 服务器的 7500 端口上监听。 |
7 | 指定交换密钥指纹,该指纹是在之前的步骤中生成的。 |
8 | 可选:以有效的 JSON 格式指定离线 Tang 服务器的广告。 |
9 | 指定必须满足的 TPM v2 和 Tang 加密条件的最小数量才能进行解密。默认值为1 。有关此主题的更多信息,请参见“配置加密阈值”。 |
10 | 如果要镜像引导磁盘,请包含此部分。更多详细信息,请参见“关于磁盘镜像”。 |
11 | 列出应包含在引导磁盘镜像中的所有磁盘设备,包括将安装 RHCOS 的磁盘。 |
12 | 包含此指令可在集群上启用 FIPS 模式。 |
要为集群启用 FIPS 模式,必须从配置为在 FIPS 模式下运行的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 上配置 FIPS 模式的更多信息,请参见 在 FIPS 模式下安装系统。如果要配置节点以同时使用磁盘加密和镜像,则必须在同一个 Butane 配置文件中配置这两个功能。如果要在启用 FIPS 模式的节点上配置磁盘加密,则必须在同一个 Butane 配置文件中包含 |
从相应的 Butane 配置文件创建控制平面或计算节点清单,并将其保存到<installation_directory>/openshift
目录。例如,要为计算节点创建清单,请运行以下命令
$ butane $HOME/clusterconfig/worker-storage.bu -o <installation_directory>/openshift/99-worker-storage.yaml
对于每个需要磁盘加密或镜像的节点类型,重复此步骤。
保存 Butane 配置文件,以防将来需要更新清单。
继续进行 OpenShift Container Platform 安装的其余部分。
您可以在安装期间监控 RHCOS 节点上的控制台日志,以查找与磁盘加密或镜像相关的错误消息。 |
如果配置了其他数据分区,除非明确请求加密,否则它们不会被加密。 |
安装 OpenShift Container Platform 后,您可以验证集群节点上是否启用了引导磁盘加密或镜像。
从安装主机使用调试 Pod 访问集群节点
启动节点的调试 Pod,例如
$ oc debug node/compute-1
将/host
设置为调试 shell 中的根目录。调试 Pod 将节点的根文件系统挂载到 Pod 内的/host
。通过将根目录更改为/host
,您可以运行节点上可执行路径中包含的二进制文件。
# chroot /host
运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Container Platform 集群节点是不可变的,并且依赖于 Operators 来应用集群更改。不建议使用 SSH 访问集群节点。但是,如果 OpenShift Container Platform API 不可用,或者目标节点上的 |
如果您配置了启动盘加密,请验证其是否已启用。
在调试 shell 中,查看节点上根映射的状态。
# cryptsetup status root
/dev/mapper/root is active and is in use.
type: LUKS2 (1)
cipher: aes-xts-plain64 (2)
keysize: 512 bits
key location: keyring
device: /dev/sda4 (3)
sector size: 512
offset: 32768 sectors
size: 15683456 sectors
mode: read/write
1 | 加密格式。启用 TPM v2 或 Tang 加密模式时,RHCOS 启动盘将使用 LUKS2 格式加密。 |
2 | 用于加密 LUKS2 卷的加密算法。如果启用 FIPS 模式,则使用aes-cbc-essiv:sha256 密码。 |
3 | 包含加密 LUKS2 卷的设备。如果启用了镜像,则该值将表示软件镜像设备,例如/dev/md126 。 |
列出绑定到加密设备的 Clevis 插件。
# clevis luks list -d /dev/sda4 (1)
1 | 指定在上一步输出的device 字段中列出的设备。 |
1: sss '{"t":1,"pins":{"tang":[{"url":"http://tang.example.com:7500"}]}}' (1)
1 | 在示例输出中,Tang 插件由/dev/sda4 设备的 Shamir’s Secret Sharing (SSS) Clevis 插件使用。 |
如果您配置了镜像,请验证其是否已启用。
在调试 shell 中,列出节点上的软件 RAID 设备。
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdb3[1] sda3[0] (1)
393152 blocks super 1.0 [2/2] [UU]
md127 : active raid1 sda4[0] sdb4[1] (2)
51869632 blocks super 1.2 [2/2] [UU]
unused devices: <none>
1 | /dev/md126 软件 RAID 镜像设备使用集群节点上的/dev/sda3 和/dev/sdb3 磁盘设备。 |
2 | /dev/md127 软件 RAID 镜像设备使用集群节点上的/dev/sda4 和/dev/sdb4 磁盘设备。 |
查看上一步命令输出中列出的每个软件 RAID 设备的详细信息。以下示例列出了/dev/md126
设备的详细信息。
# mdadm --detail /dev/md126
/dev/md126:
Version : 1.0
Creation Time : Wed Jul 7 11:07:36 2021
Raid Level : raid1 (1)
Array Size : 393152 (383.94 MiB 402.59 MB)
Used Dev Size : 393152 (383.94 MiB 402.59 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Jul 7 11:18:24 2021
State : clean (2)
Active Devices : 2 (3)
Working Devices : 2 (3)
Failed Devices : 0 (4)
Spare Devices : 0
Consistency Policy : resync
Name : any:md-boot (5)
UUID : ccfa3801:c520e0b5:2bee2755:69043055
Events : 19
Number Major Minor RaidDevice State
0 252 3 0 active sync /dev/sda3 (6)
1 252 19 1 active sync /dev/sdb3 (6)
1 | 指定设备的 RAID 级别。raid1 表示 RAID 1 磁盘镜像。 |
2 | 指定 RAID 设备的状态。 |
3 | 指出处于活动状态并正常工作的底层磁盘设备的数量。 |
4 | 指出处于故障状态的底层磁盘设备的数量。 |
5 | 软件 RAID 设备的名称。 |
6 | 提供有关软件 RAID 设备使用的底层磁盘设备的信息。 |
列出挂载在软件 RAID 设备上的文件系统。
# mount | grep /dev/md
/dev/md127 on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /etc type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /usr type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /sysroot type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/containers/storage/overlay type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/kubelet/pods/e5054ed5-f882-4d14-b599-99c050d4e0c0/volume-subpaths/etc/tuned/1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/kubelet/pods/e5054ed5-f882-4d14-b599-99c050d4e0c0/volume-subpaths/etc/tuned/2 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/kubelet/pods/e5054ed5-f882-4d14-b599-99c050d4e0c0/volume-subpaths/etc/tuned/3 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/kubelet/pods/e5054ed5-f882-4d14-b599-99c050d4e0c0/volume-subpaths/etc/tuned/4 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md127 on /var/lib/kubelet/pods/e5054ed5-f882-4d14-b599-99c050d4e0c0/volume-subpaths/etc/tuned/5 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
/dev/md126 on /boot type ext4 (rw,relatime,seclabel)
在示例输出中,/boot
文件系统挂载在/dev/md126
软件 RAID 设备上,根文件系统挂载在/dev/md127
上。
对每种 OpenShift Container Platform 节点类型重复验证步骤。
有关 TPM v2 和 Tang 加密模式的更多信息,请参阅使用基于策略的解密配置加密卷的自动解锁。
您可以启用软件 RAID 分区以提供外部数据卷。OpenShift Container Platform 支持 RAID 0、RAID 1、RAID 4、RAID 5、RAID 6 和 RAID 10,以实现数据保护和容错。有关更多详细信息,请参阅“关于磁盘镜像”。
OpenShift Container Platform 4.17 不支持安装驱动器上的软件 RAID。 |
您已在安装节点上下载了 OpenShift Container Platform 安装程序。
您已在安装节点上安装 Butane。
Butane 是 OpenShift Container Platform 使用的命令行实用程序,它提供方便的简写语法来编写机器配置,以及执行机器配置的附加验证。有关更多信息,请参阅“使用 Butane 创建机器配置”部分。 |
创建一个 Butane 配置,使用软件 RAID 配置数据卷。
要在与镜像启动盘相同的磁盘上使用 RAID 1 配置数据卷,请创建一个$HOME/clusterconfig/raid1-storage.bu
文件,例如
variant: openshift
version: 4.17.0
metadata:
name: raid1-storage
labels:
machineconfiguration.openshift.io/role: worker
boot_device:
mirror:
devices:
- /dev/disk/by-id/scsi-3600508b400105e210000900000490000
- /dev/disk/by-id/scsi-SSEAGATE_ST373453LW_3HW1RHM6
storage:
disks:
- device: /dev/disk/by-id/scsi-3600508b400105e210000900000490000
partitions:
- label: root-1
size_mib: 25000 (1)
- label: var-1
- device: /dev/disk/by-id/scsi-SSEAGATE_ST373453LW_3HW1RHM6
partitions:
- label: root-2
size_mib: 25000 (1)
- label: var-2
raid:
- name: md-var
level: raid1
devices:
- /dev/disk/by-partlabel/var-1
- /dev/disk/by-partlabel/var-2
filesystems:
- device: /dev/md/md-var
path: /var
format: xfs
wipe_filesystem: true
with_mount_unit: true
1 | 向启动盘添加数据分区时,建议最小值为 25000 MiB。如果未指定值,或者指定的值小于建议的最小值,则生成的根文件系统将太小,并且将来重新安装 RHCOS 可能会覆盖数据分区的开头。 |
要在辅助磁盘上使用 RAID 1 配置数据卷,请创建一个$HOME/clusterconfig/raid1-alt-storage.bu
文件,例如
variant: openshift
version: 4.17.0
metadata:
name: raid1-alt-storage
labels:
machineconfiguration.openshift.io/role: worker
storage:
disks:
- device: /dev/sdc
wipe_table: true
partitions:
- label: data-1
- device: /dev/sdd
wipe_table: true
partitions:
- label: data-2
raid:
- name: md-var-lib-containers
level: raid1
devices:
- /dev/disk/by-partlabel/data-1
- /dev/disk/by-partlabel/data-2
filesystems:
- device: /dev/md/md-var-lib-containers
path: /var/lib/containers
format: xfs
wipe_filesystem: true
with_mount_unit: true
从上一步创建的 Butane 配置创建 RAID 清单,并将其保存到<installation_directory>/openshift
目录。例如,要为计算节点创建清单,请运行以下命令:
$ butane $HOME/clusterconfig/<butane_config>.bu -o <installation_directory>/openshift/<manifest_name>.yaml (1)
1 | 将<butane_config> 和<manifest_name> 替换为上一步中的文件名。例如,辅助磁盘为raid1-alt-storage.bu 和raid1-alt-storage.yaml 。 |
保存 Butane 配置,以防将来需要更新清单。
继续进行 OpenShift Container Platform 安装的其余部分。
Intel® VROC 是一种混合 RAID 类型,其中某些维护工作卸载到硬件,但对操作系统显示为软件 RAID。
以下过程配置启用 Intel® VROC 的 RAID1。
您的系统启用了 Intel® Volume Management Device (VMD)。
通过运行以下命令创建 Intel® Matrix Storage Manager (IMSM) RAID 容器:
$ mdadm -CR /dev/md/imsm0 -e \
imsm -n2 /dev/nvme0n1 /dev/nvme1n1 (1)
1 | RAID 设备名称。在此示例中,列出了两个设备。如果您提供两个以上的设备名称,则必须调整-n 标志。例如,列出三个设备将使用标志-n3 。 |
在容器内创建 RAID1 存储。
通过运行以下命令在真正的 RAID1 卷前面创建一个虚拟 RAID0 卷:
$ mdadm -CR /dev/md/dummy -l0 -n2 /dev/imsm0 -z10M --assume-clean
通过运行以下命令创建真正的 RAID1 阵列:
$ mdadm -CR /dev/md/coreos -l1 -n2 /dev/imsm0
停止 RAID0 和 RAID1 成员阵列,并使用以下命令删除虚拟 RAID0 阵列:
$ mdadm -S /dev/md/dummy \
mdadm -S /dev/md/coreos \
mdadm --kill-subarray=0 /dev/md/imsm0
通过运行以下命令重新启动 RAID1 阵列:
$ mdadm -A /dev/md/coreos /dev/md/imsm0
在 RAID1 设备上安装 RHCOS。
通过运行以下命令获取 IMSM 容器的 UUID:
$ mdadm --detail --export /dev/md/imsm0
安装 RHCOS 并包含rd.md.uuid
内核参数,方法是运行以下命令:
$ coreos-installer install /dev/md/coreos \
--append-karg rd.md.uuid=<md_UUID> (1)
...
1 | IMSM 容器的 UUID。 |
包含安装 RHCOS 所需的任何其他coreos-installer
参数。
您可以通过修改chrony.conf
文件的内容并将这些内容作为机器配置传递给您的节点,来设置 chrony 时间服务(chronyd
)使用的时钟服务器和相关设置。
创建一个包含chrony.conf
文件内容的 Butane 配置。例如,要在工作节点上配置 chrony,请创建一个99-worker-chrony.bu
文件。
有关 Butane 的信息,请参见“使用 Butane 创建机器配置”。 |
variant: openshift
version: 4.17.0
metadata:
name: 99-worker-chrony (1)
labels:
machineconfiguration.openshift.io/role: worker (1)
storage:
files:
- path: /etc/chrony.conf
mode: 0644 (2)
overwrite: true
contents:
inline: |
pool 0.rhel.pool.ntp.org iburst (3)
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
1 | 在控制平面节点上,在这两个位置将worker 替换为master 。 |
2 | 在机器配置文件中为mode 字段指定八进制值模式。创建文件并应用更改后,mode 将转换为十进制值。您可以使用命令oc get mc <mc-name> -o yaml 检查 YAML 文件。 |
3 | 指定任何有效且可访问的时间源,例如您的 DHCP 服务器提供的源。或者,您可以指定以下任何 NTP 服务器:1.rhel.pool.ntp.org 、2.rhel.pool.ntp.org 或3.rhel.pool.ntp.org 。 |
使用 Butane 生成一个MachineConfig
对象文件99-worker-chrony.yaml
,其中包含要传递给节点的配置。
$ butane 99-worker-chrony.bu -o 99-worker-chrony.yaml
可以通过两种方式之一应用配置
如果集群尚未运行,在生成清单文件后,将MachineConfig
对象文件添加到<installation_directory>/openshift
目录,然后继续创建集群。
如果集群已经在运行,请应用该文件。
$ oc apply -f ./99-worker-chrony.yaml
有关 Butane 的信息,请参见 使用 Butane 创建机器配置。
有关 FIPS 支持的信息,请参见 FIPS 加密支持。