第 17 章 安装配置
17.1. 自定义节点
虽然不鼓励直接更改 OpenShift Container Platform 节点,但有时在实现低级别安全、冗余、网络或性能功能时需要这样做。通过以下方法可以对 OpenShift Container Platform 节点直接进行更改:
-
创建包含在清单文件中的机器配置,以便在
openshift-install
期间启动集群。 - 创建通过 Machine Config Operator 传递至运行的 OpenShift Container Platform 节点的 MachineConfig。
-
创建在安装裸机节点时传递给
coreos-installer
的 Ignition 配置。
以下小节描述了您可能需要以这种方式在节点中配置的功能。
17.1.1. 使用 Butane 创建机器配置
机器配置用于通过指示机器如何创建用户和文件系统、设置网络、安装 systemd 单元等来配置 control plane 和 worker 机器。
因为修改机器配置可能比较困难,所以可以使用 Butane configs 为您创建机器配置,从而使节点配置变得更加容易。
17.1.1.1. 关于 Butane
Butane 是 OpenShift Container Platform 用来为编写机器配置以及执行机器配置额外验证提供方便的简写语法的命令行实用程序。Butane 接受的格式在 OpenShift Butane config spec 中定义。
17.1.1.2. 安装 Butane
您可以安装 Butane 工具(butane
)从命令行界面创建 OpenShift Container Platform 机器配置。您可以通过下载对应的二进制文件,在 Linux、Windows 或 macOS 上安装 butane
。
Butane 版本与旧版本及 Fedora CoreOS 配置转换器(FCCT)向后兼容。
流程
- 从 https://mirror.openshift.com/pub/openshift-v4/clients/butane/ 的 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>
17.1.1.3. 使用 Butane 创建 MachineConfig 对象
您可以使用 Butane 生成 MachineConfig
对象,以便在安装时或通过 Machine Config Operator 配置 worker 或 control plane 节点。
先决条件
-
您已安装了
butane
工具。
流程
创建 Butane 配置文件。以下示例创建一个名为
99-worker-custom.bu
的文件,该文件将系统控制台配置为显示内核调试信息并为 chrony 时间服务指定自定义设置:variant: openshift version: 4.8.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
注意99-worker-custom.bu
文件设置为为 worker 节点创建机器配置。要在 control plane 节点上部署,将角色从worker
更改为master
。要进行这两个操作,您可以通过为不同类型的部署使用不同的文件名来重复整个过程。通过提供您在上一步中创建的文件来创建
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
其他资源
17.1.2. 添加 day-1 内核参数
虽然修改内核参数通常应做为第 2 天的任务,但您可能希望在初始集群安装过程中将内核参数添加到所有 master 节点或 worker 节点中。下面是一些您可能需要在集群安装过程中添加内核参数以在系统第一次引导前生效的原因:
- 禁用某个功能(比如 SELinux),以使这个功能不会对系统产生任何影响。
不支持在 RHCOS 上禁用 SELinux。
- 您需要在系统启动前进行一些低级网络配置。
要向 master 节点或 worker 节点添加内核参数,您可以创建一个 MachineConfig
对象,并将该对象注入 Ignition 在集群设置过程中使用的清单文件集合中。
如需列出引导时可以传递给 RHEL 8 内核的参数,请参阅 Kernel.org 内核参数。如果需要这些参数来完成初始的 OpenShift Container Platform 安装,最好使用这个流程添加内核参数。
流程
切换到包含安装程序的目录,并为集群生成 Kubernetes 清单:
$ ./openshift-install create manifests --dir <installation_directory>
- 决定是否要在 worker 或 control plane 节点(也称为 master 节点)中添加内核参数。
在
openshift
目录中,创建一个文件(例如:99-openshift-machineconfig-master-kargs.yaml
)来定义MachineConfig
对象以添加内核设置。这个示例在 control plane 节点中添加了一个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
,以将内核参数添加到 worker 节点。创建一个单独的 YAML 文件,以添加到 master 节点和 worker 节点中。
现在您可以继续创建集群。
17.1.3. 在节点中添加内核模块
对于大多数常用硬件,在计算机启动时,Linux 内核会包括使用这些硬件所需的设备驱动程序模块。但是对于一些硬件来说,在 Linux 中不提供它们的模块。因此,您必须找到一种方法来为每个主机计算机提供这些模块。此流程介绍了如何为 OpenShift Container Platform 集群中的节点进行此操作。
当首先按照这些说明部署了一个内核模块后,这个模块就可用于当前内核。如果安装了新内核,kmods-via-containers 软件将被重建并部署该模块,以便使新内核可使用该模块的兼容版本。
使这个功能可以在每个节点中保持模块最新状态的方法是:
- 在引导时启动的每个节点中添加 systemd 服务,以检测是否安装了新内核。
- 如果检测到一个新的内核,该服务会重建该模块并将其安装到内核中
有关此过程所需软件的详情,请查看 kmods-via-containers github 站点。
需要记住的几个重要问题:
- 这个过程是技术预览。
-
软件工具和示例还没有官方的 RPM,现只能从非官方的
github.com
站点获得。 - 红帽不支持您通过这些步骤添加的第三方内核模块。
-
在本流程中,构建您的内核模块所需的软件部署在 RHEL 8 容器中。请记住,当节点有新内核时,每个节点上会自动重新构建模块。因此,每个节点都需要访问一个
yum
存储库,该程序存储库包含重建该模块所需的内核和相关软件包。该内容最好由一个有效的 RHEL 订阅提供。
17.1.3.1. 构建并测试内核模块容器
在将内核模块部署到 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
Dockerfile 示例
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"
为您的内核模块创建一个
kmods-via-containers@.service
实例(在这个示例中是simple-kmod
):$ sudo make install
启用
kmods-via-containers@.service
实例:$ sudo kmods-via-containers build simple-kmod $(uname -r)
启用并启动 systemd 服务:
$ sudo systemctl enable kmods-via-containers@simple-kmod.service --now
查看服务状态:
$ sudo systemctl status kmods-via-containers@simple-kmod.service
输出示例
● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; 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
下一步,当系统引导这个服务时,会检查新内核是否在运行。如果有一个新内核,该服务会构建内核模块的新版本,然后载入它。如果已经构建了该模块,它将只载入该模块。
17.1.3.2. 为 OpenShift Container Platform 置备内核模块
根据 OpenShift Container Platform 集群首次引导时是否必须存在内核模块,您可以通过以下两种方式之一设置内核模块部署:
-
在集群安装时(day-1)置备内核模块:您可以通过一个
MachineConfig
创建内容,并通过包括一组清单文件来将其提供给openshift-install
。 - 通过 Machine Config Operator 置备内核模块(day-2):如果可以等到集群启动并运行后再添加内核模块,则可以通过 Machine Config Operator (MCO) 部署内核模块软件。
在这两种情况下,每个节点都需要在检测到新内核时可以获得内核软件包及相关软件包。您可以通过以下几种方法设置每个节点来获取该内容。
- 为每个节点提供 RHEL 权利。
-
从现有的 RHEL 主机获取 RHEL 权利。把
/etc/pki/entitlement
目录中的 RHEL 授权复制到与您在构建 Ignition 配置时提供的其他文件相同的位置。 -
在 Dockerfile 中,添加包括了内核和其他软件包的
yum
存储库。这必须包括新内核软件包,因为它们需要与新安装的内核相匹配。
17.1.3.2.1. 通过 MachineConfig 对象置备内核模块
通过将内核模块软件与 MachineConfig
对象一起打包,您可以在安装时或通过 Machine Config Operator 向 worker 或 control plane 节点发送该软件。
流程
注册 RHEL 8 系统:
# subscription-manager register
为 RHEL 8 系统添加订阅:
# subscription-manager attach --auto
安装构建软件所需的软件:
# yum install podman make git -y
创建用于托管内核模块和工具的目录:
$ mkdir kmods; cd kmods
获得
kmods-via-containers
软件:克隆
kmod-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.8.0 metadata: name: 99-simple-kmod labels: machineconfiguration.openshift.io/role: worker 1 storage: trees: - local: kmod-tree systemd: units: - name: kmods-via-containers@simple-kmod.service enabled: true
- 1
- 要在 control plane 节点上部署,将
worker
更改为master
。要在 control plane 和 worker 节点上部署,请对每个节点类型执行一次这些说明的其余部分。
使用 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
您的节点将启动
kmods-via-containers@simple-kmod.service
服务,并将载入内核模块。为了确认内核模块已加载,您可以登录到节点(使用
oc debug node/<openshift-node>
,然后运行chroot /host
)。要列出模块,请使用lsmod
命令:$ lsmod | grep simple_
输出示例
simple_procfs_kmod 16384 0 simple_kmod 16384 0
17.1.4. 在安装过程中加密和镜像磁盘
在 OpenShift Container Platform 安装过程中,您可以在集群节点上启用引导磁盘加密和镜像功能。
17.1.4.1. 关于磁盘加密
您可以在安装时在 control plane 和计算节点上为引导磁盘启用加密。OpenShift Container Platform 支持 Trusted Platform 模块 (TPM) v2 和 Tang 加密模式。
- TPM v2:这是首选模式。TPM v2 将密码短语存储在服务器中包含的安全加密处理器中。如果从服务器中删除了磁盘,您可以使用这个模式防止集群节点中的引导磁盘数据被解密。
- Tang:Tang 和 Clevis 是启用网络绑定磁盘加密 (NBDE) 的服务器和客户端组件。您可以将集群节点中的引导磁盘数据绑定到一个或多个 Tang 服务器。这可以防止数据被解密,除非节点位于可访问 Tang 服务器的安全网络中。Clevis 是一种自动化的解密框架,用于在客户端实现解密。
使用 Tang 加密模式加密您的磁盘只支持在用户置备的基础架构上的裸机和 vSphere 安装。
在以前的 Red Hat Enterprise Linux CoreOS (RHCOS) 版本中,磁盘加密是通过在 Ignition 配置中指定 /etc/clevis.json
来配置的。使用 OpenShift Container Platform 4.7 或更高版本创建的集群不支持该文件,应按照以下流程配置磁盘加密。
启用 TPM v2 或 Tang 加密模式时,RHCOS 引导磁盘将使用 LUKS2 格式进行加密。
这个功能:
- 可用于安装程序置备的基础架构和用户置备的基础架构部署
- 只在 Red Hat Enterprise Linux CoreOS (RHCOS) 系统上被支持
- 在清单安装阶段设置磁盘加密,以便加密所有写入磁盘的数据(从第一次引导开始)
- 不需要用户干预就可以提供密码短语
- 使用 AES-256-XTS 加密,如果启用了 FIPS 模式,则使用 AES-256-CBC
17.1.4.1.1. 配置加密阈值
在 OpenShift Container Platform 中,您可以指定多个 Tang 服务器的要求。您还可以同时配置 TPM v2 和 Tang 加密模式,以便只有在 TPM 安全加密处理器存在并且 Tang 服务器可以通过安全网络访问时,才能解密引导磁盘数据。
您可以使用 Butane 配置中的 threshold
属性来定义进行解密时必须满足的 TPM v2 和 Tang 加密条件的最小数量。通过声明的条件的任意组合达到声明的值时,会满足阈值。例如,在以下配置中的 threshold
的值为 2
,当访问两个 Tang 服务器或访问 TPM 安全加密处理器和其中一个 Tang 服务器时会达到:
用于磁盘加密的 Butane 配置示例
variant: openshift version: 4.8.0 metadata: name: worker-storage labels: machineconfiguration.openshift.io/role: worker boot_device: layout: x86_64 luks: tpm2: true 1 tang: 2 - url: http://tang1.example.com:7500 thumbprint: jwGN5tRFK-kF6pIX89ssF3khxxX - url: http://tang2.example.com:7500 thumbprint: VCJsvZFjBSIHSldw78rOrq7h2ZF threshold: 2 3 openshift: fips: true
默认的 threshold
值为 1
。如果您在配置中包含多个加密条件,但没有指定阈值,则会在满足任何条件时进行解密。
如果您同时需要 TPM v2 和 Tang 来解密,则 threshold
属性的值必须与声明的 Tang 服务器总数加上一。如果 threshold
值较低,则在只使用其中一个加密模式时就会达到阈值。例如,如果 tpm2
设为 true
,并且指定了两个 Tang 服务器,那么即使 TPM 安全加密处理器不可用,也可以通过访问两个 Tang 服务器来满足阈值 2
。
17.1.4.2. 关于磁盘镜像(mirroring)
在 control plane 和 worker 节点上安装 OpenShift Container Platform 时,您可以将引导磁盘以及其他磁盘镜像到两个或者多个冗余存储设备。如果存储设备出现故障,只要有一个设备仍然可用,节点仍将继续正常工作。
当镜像并不支持替换失败的磁盘。要将镜像恢复到正常的非降级状态,需要重新置备该节点。
镜像仅适用于 RHCOS 系统的用户置备的基础架构部署。使用 BIOS 或 UEFI 和 ppc64le 节点上的 x86_64 节点上提供镜像支持。
17.1.4.3. 配置磁盘加密和镜像
您可以在 OpenShift Container Platform 安装过程中启用并配置加密和镜像功能。
先决条件
- 您已在安装节点上下载了 OpenShift Container Platform 安装程序。
在安装节点上安装了 Butane。
注意Butane 是 OpenShift Container Platform 用来为编写机器配置以及执行机器配置额外验证提供方便的简写语法的命令行实用程序。如需更多信息,请参阅使用 Butane 创建机器配置部分。
- 您可以使用 Red Hat Enterprise Linux (RHEL) 8 机器来生成 Tang Exchange 密钥的指纹。
流程
- 如果要使用 TPM v2 加密集群,请检查每个节点的 BIOS 是否需要启用 TPM v2 加密。这在大多数 Dell 系统中是必需的。请参阅您的计算机的相关手册。
如果要使用 Tang 加密集群,请按照以下步骤操作:
- 设置 Tang 服务器或访问现有服务器。具体步骤请查看网络绑定磁盘加密 。
如果尚未安装,在 RHEL 8 机器上安装
clevis
软件包:$ sudo yum install clevis
在 RHEL 8 计算机上,运行以下命令来生成交换密钥的指纹。使用 Tang 服务器的 URL 替换
http://tang.example.com:7500
:$ clevis-encrypt-tang '{"url":"http://tang.example.com:7500"}' < /dev/null > /dev/null 1
- 1
- 在本例中,
tangd.socket
侦听 Tang 服务器上的端口7500
。
注意此步骤中仅使用
clevis-encrypt-tang
命令,以生成交换密钥的指纹。此时不会将数据传递给命令以进行加密,因此/dev/null
作为输入而不是纯文本提供。加密的输出也会发送到/dev/null
,因为此过程不需要它。输出示例
The advertisement contains the following signing keys: PLjNyRdGw03zlRoGjQYMahSZGu9 1
- 1
- Exchange 键的指纹。
当出现
Do you wish to trust these keys? [ynYN]
提示时,输入Y
。注意RHEL 8 提供 Clevis 版本 15,它使用 SHA-1 哈希算法来生成指纹。些其他发行版提供 Clevis 版本 17 或更高版本,它们使用 SHA-256 哈希算法进行指纹。您必须使用 SHA-1 创建 thumbprint 的 Clevis 版本来防止在 OpenShift Container Platform 集群节点上安装 Red Hat Enterprise Linux CoreOS (RHCOS) 时出现 Clevis 绑定问题。
如果节点配置了静态 IP 寻址,在安装 RHCOS 节点时使用
coreos-installer
--append-karg
选项来设置已安装系统的 IP 地址。附加您的网络所需的ip=
和其他参数。重要某些配置静态 IP 的方法不会在第一次引导后影响 initramfs,也不会使用 Tang 加密。这包括
coreos-installer
--copy-network
选项,以及在安装过程中将ip=
参数添加到 live ISO 或 PXE 镜像的内核命令行中。不正确的静态 IP 配置会导致节点第二次引导失败。
在安装节点上,切换到包含安装程序的目录,并为集群生成 Kubernetes 清单:
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
- 将
<installation_directory>
替换为您要存储安装文件的目录的路径。
创建可配置磁盘加密、镜像或两者的 Butane 配置。例如,若要为计算节点配置存储,创建一个
$HOME/clusterconfig/worker-storage.bu
文件。引导设备的 Butane 配置示例
variant: openshift version: 4.8.0 metadata: name: worker-storage 1 labels: machineconfiguration.openshift.io/role: worker 2 boot_device: layout: x86_64 3 luks: 4 tpm2: true 5 tang: 6 - url: http://tang.example.com:7500 7 thumbprint: PLjNyRdGw03zlRoGjQYMahSZGu9 8 threshold: 1 9 mirror: 10 devices: 11 - /dev/sda - /dev/sdb openshift: fips: true 12
- 1 2
- 对于 control plane 配置,在这两个位置中将
worker
替换为master
。 - 3
- 在 ppc64le 节点上,将此字段设置为
ppc64le
。在所有其他节点上,可以省略此字段。 - 4
- 如果要加密 root 文件系统,请包含此部分。如需了解更多详细信息,请参阅关于磁盘加密部分。
- 5
- 如果要使用受信任的平台模块 (TPM) 加密根文件系统,请包含此字段。
- 6
- 如果要使用一个或多个 Tang 服务器,请包含此部分。
- 7
- 指定 Tang 服务器的 URL。在本例中,
tangd.socket
侦听 Tang 服务器上的端口7500
。 - 8
- 指定上一步中生成的 Exchange key thumbprint。
- 9
- 指定进行解密时必须满足的最小 TPM v2 和 Tang 加密条件。默认值为
1
。有关此主题的更多信息,请参阅配置加密阈值部分。 - 10
- 如果要镜像引导磁盘,请包含此部分。如需了解更多详细信息,请参阅关于磁盘镜像。
- 11
- 列出引导磁盘镜像中包含的所有磁盘设备,包括 RHCOS 将安装到的磁盘。
- 12
- 包括这个指令,用于在集群中启用 FIPS 模式。
重要如果要将节点配置为使用磁盘加密和镜像,则必须在相同的 Butane 配置中配置这两个功能。另外,如果您要在启用了 FIPS 模式的节点中配置磁盘加密,您必须在同一个 Butane 配置中包含
fips
指令,即使在单独的清单中也启用了 FIPS 模式。从对应的 Butane 配置创建一个 control plane 或计算节点清单,并将它保存到
<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 后,您可以验证是否在集群节点上启用了引导磁盘加密或镜像功能。
在安装主机上,使用 debug pod 访问集群节点:
为节点启动 debug pod。以下示例为
compute-1
节点启动 debug pod:$ oc debug node/compute-1
将
/host
设为 debug shell 中的根目录。debug pod 在 pod 中的/host
中挂载节点的根文件系统。通过将根目录改为/host
,您可以运行节点上可执行路径中包含的二进制文件:# chroot /host
注意运行 Red Hat Enterprise Linux CoreOS(RHCOS)的 OpenShift Container Platform 集群节点不可变,它依赖于 Operator 来应用集群更改。不建议使用 SSH 访问集群节点。但是,如果 OpenShift Container Platform API 不可用,或
kubelet
在目标节点上无法正常工作,oc
操作将会受到影响。在这种情况下,可以使用ssh core@<node>.<cluster_name>.<base_domain>
来访问节点。
如果配置了引导磁盘加密,请验证是否启用它:
在 debug shell 中查看节点上 root 映射的状态:
# 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
列出绑定到加密设备的 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 的 Secret Sharing (SSS) Clevis 插件使用。
如果配置了镜像 (mirror),请验证是否启用它:
在 debug 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>
查看上一命令输出中列出的每个软件 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 4 Failed Devices : 0 5 Spare Devices : 0 Consistency Policy : resync Name : any:md-boot 6 UUID : ccfa3801:c520e0b5:2bee2755:69043055 Events : 19 Number Major Minor RaidDevice State 0 252 3 0 active sync /dev/sda3 7 1 252 19 1 active sync /dev/sdb3 8
列出软件 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 设备上,root 文件系统挂载到/dev/md127
。
- 对每种 OpenShift Container Platform 节点类型重复验证步骤。
其他资源
- 有关 TPM v2 和 Tang 加密模式的更多信息,请参阅使用基于策略的解密配置加密卷的自动解锁。
17.1.4.4. 配置一个启用了 RAID 的数据卷
您可以启用软件 RAID 分区以提供外部数据卷。OpenShift Container Platform 支持 RAID 0、RAID 1、RAID 4、RAID 5、RAID 6 和 RAID 10 用于数据保护和容错。如需了解更多详细信息,请参阅"关于磁盘镜像"。
先决条件
- 您已在安装节点上下载了 OpenShift Container Platform 安装程序。
在安装节点上已安装了 Butane。
注意Butane 是 OpenShift Container Platform 用来为编写机器配置以及执行机器配置额外验证提供方便的简写语法的命令行实用程序。如需更多信息,请参阅使用 Butane 创建机器配置部分。
流程
创建一个 Butane 配置,以使用软件 RAID 配置数据卷。
要在用于镜像引导磁盘的相同磁盘上配置带有 RAID 1 的数据卷,请创建一个
$HOME/clusterconfig/raid1-storage.bu
文件,例如:镜像引导磁盘上的 RAID 1
variant: openshift version: 4.8.0 metadata: name: raid1-storage labels: machineconfiguration.openshift.io/role: worker boot_device: mirror: devices: - /dev/sda - /dev/sdb storage: disks: - device: /dev/sda partitions: - label: root-1 size_mib: 25000 1 - label: var-1 - device: /dev/sdb partitions: - label: root-2 size_mib: 25000 2 - 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
要在辅助磁盘上配置带有 RAID 1 的数据卷,请创建一个
$HOME/clusterconfig/raid1-alt-storage.bu
文件,例如:辅助磁盘上的 RAID 1
variant: openshift version: 4.8.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 安装的其余部分。
17.1.5. 配置 chrony 时间服务
您可以通过修改 chrony.conf
文件的内容来设置 chrony 时间服务(chronyd
)使用的时间服务器和相关设置,并通过一个机器配置将这些内容传递给节点。
流程
创建包含
chrony.conf
文件内容的 Butane 配置。例如,要在 worker 节点上配置 chrony,请创建一个99-worker-chrony.bu
文件。注意有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。
variant: openshift version: 4.8.0 metadata: name: 99-worker-chrony 1 labels: machineconfiguration.openshift.io/role: worker 2 storage: files: - path: /etc/chrony.conf mode: 0644 3 overwrite: true contents: inline: | pool 0.rhel.pool.ntp.org iburst 4 driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony
使用 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
-
如果集群还没有运行,在生成清单文件后,将
17.1.6. 其他资源
- 有关 Butane 的详情,请参考使用 Butane 创建机器配置。
- 有关 FIPS 支持的详情,请参考对 FIPS 加密的支持。