第 17 章 安装配置
17.1. 自定义节点
虽然不鼓励直接更改 OpenShift Container Platform 节点,但有时在实现低级别安全、冗余、网络或性能功能时需要这样做。通过以下方法可以对 OpenShift Container Platform 节点直接进行更改:
-
创建包含在清单文件中的机器配置,以便在
openshift-install
期间启动集群。 - 创建通过 Machine Config Operator 传递至运行的 OpenShift Container Platform 节点的 MachineConfig。
-
创建在安装裸机节点时传递给
coreos-installer
的 Ignition 配置。
以下小节描述了您可能需要以这种方式在节点中配置的功能。
17.1.1. 添加 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.2. 在节点中添加内核模块
对于大多数常用硬件,在计算机启动时,Linux 内核会包括使用这些硬件所需的设备驱动程序模块。但是对于一些硬件来说,在 Linux 中不提供它们的模块。因此,您必须找到一种方法来为每个主机计算机提供这些模块。此流程介绍了如何为 OpenShift Container Platform 集群中的节点进行此操作。
当首先按照这些说明部署了一个内核模块后,这个模块就可用于当前内核。如果安装了新内核,kmods-via-containers 软件将被重建并部署该模块,以便使新内核可使用该模块的兼容版本。
使这个功能可以在每个节点中保持模块最新状态的方法是:
- 在引导时启动的每个节点中添加 systemd 服务,以检测是否安装了新内核。
- 如果检测到一个新的内核,该服务会重建该模块并将其安装到内核中
有关此过程所需软件的详情,请查看 kmods-via-containers github 站点。
需要记住的几个重要问题:
- 这个过程是技术预览。
-
软件工具和示例还没有官方的 RPM,现只能从非官方的
github.com
站点获得。 - 红帽不支持您通过这些步骤添加的第三方内核模块。
-
在本流程中,构建您的内核模块所需的软件部署在 RHEL 8 容器中。请记住,当节点有新内核时,每个节点上会自动重新构建模块。因此,每个节点都需要访问一个
yum
存储库,该程序存储库包含重建该模块所需的内核和相关软件包。该内容最好由一个有效的 RHEL 订阅提供。
17.1.2.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.2.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.2.2.1. 通过 MachineConfig
对象置备内核模块
通过将内核模块软件与 MachineConfig
对象一起打包,您可以在安装时或通过 Machine Config Operator 向 worker 或 master 节点发送该软件。
首先创建您要使用的基本 Ignition 配置。在安装时,Ignition 配置需要包含添加到集群中的 core
用户的 authorized_keys
文件中的 ssh 公钥 。如果在以后通过 MCO 添加 MachineConfig
,则不需要 SSH 公钥。对于这两种方式,simple-kmod 服务示例都会创建一个 systemd 单元文件,它需要一个 kmods-via-containers@simple-kmod.service
systemd 单元是 上游程序错误的一个临时解决方案。确保 kmods-via-containers@simple-kmod.service
在引导时启动:
注册 RHEL 8 系统:
# subscription-manager register
为 RHEL 8 系统添加订阅:
# subscription-manager attach --auto
安装构建软件所需的软件:
# yum install podman make git -y
创建 Ignition 配置文件以创建 systemd 单元文件:
创建用于托管 Ignition 配置文件的目录:
$ mkdir kmods; cd kmods
创建 Ignition 配置文件以创建 systemd 单元文件:
$ cat <<EOF > ./baseconfig.ign { "ignition": { "version": "3.2.0" }, "passwd": { "users": [ { "name": "core", "groups": ["sudo"], "sshAuthorizedKeys": [ "ssh-rsa AAAA" ] } ] }, "systemd": { "units": [{ "name": "require-kvc-simple-kmod.service", "enabled": true, "contents": "[Unit]\nRequires=kmods-via-containers@simple-kmod.service\n[Service]\nType=oneshot\nExecStart=/usr/bin/true\n\n[Install]\nWantedBy=multi-user.target" }] } } EOF
注意您必须将公共 SSH 密钥添加到
baseconfig.ign
文件中 ,以便openshift-install
使用该文件。如果使用 MCO 创建MachineConfig
对象,则不需要公共 SSH 密钥。
创建使用以下配置的基本 MCO YAML 片断:
$ cat <<EOF > mc-base.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 10-kvc-simple-kmod spec: config: EOF
注意Mc-base.yaml
设置为在worker
节点上部署内核模块 。要部署到 master 节点上,请将角色从worker
更改为master
。要进行这两个操作,您可以通过为不同类型的部署使用不同的文件名来重复整个过程。获得
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/
获取名为
filetranspiler
的工具程序及相关的依赖软件:$ cd .. ; sudo yum install -y python3 git clone https://github.com/ashcrow/filetranspiler.git
生成最终机器配置 YAML(
mc.yaml
),其中包括基本 Ignition 配置、基础机器配置以及包括您要提供的文件的 fakeroot 目录:$ ./filetranspiler/filetranspile -i ./baseconfig.ign \ -f ${FAKEROOT} --format=yaml --dereference-symlinks \ | sed 's/^/ /' | (cat mc-base.yaml -) > 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.3. 在安装过程中加密磁盘
您可以在安装时在 control plane 和计算节点上为引导磁盘启用加密。OpenShift Container Platform 支持 Trusted Platform 模块 (TPM) v2 和 Tang 加密模式。
- TPM v2:这是首选模式。TPM v2 将密码短语存储在服务器中包含的安全加密处理器中。如果从服务器中删除了磁盘,您可以使用这个模式防止集群节点中的引导磁盘数据被解密。
- Tang:Tang 和 Clevis 是启用网络绑定磁盘加密 (NBDE) 的服务器和客户端组件。您可以将集群节点中的引导磁盘数据绑定到 Tang 服务器。这可以防止数据被解密,除非节点位于可访问 Tang 服务器的安全网络中。Clevis 是一种自动化的解密框架,用于在客户端实现解密。
使用 Tang 加密模式加密您的磁盘只支持在用户置备的基础架构上的裸机和 vSphere 安装。
启用 TPM v2 或 Tang 加密模式时,RHCOS 引导磁盘将使用 LUKS2 格式进行加密。
这个功能:
- 可用于安装程序置备的基础架构和用户置备的基础架构部署
- 只在 Red Hat Enterprise Linux CoreOS (RHCOS) 系统上被支持
- 在清单安装阶段设置磁盘加密,以便加密所有写入磁盘的数据(从第一次引导开始)
- 不需要用户干预就可以提供密码短语
- 使用 AES-256-CBC 加密
按照以下两个流程之一为集群中的节点启用磁盘加密。
17.1.3.1. 启用 TPM v2 磁盘加密
使用以下步骤在 OpenShift Container Platform 安装过程中启用 TPM v2 模式磁盘加密。
在 RHCOS 的早期版本中,磁盘加密是通过在 Ignition 配置中指定 /etc/clevis.json
来配置。使用 OpenShift Container Platform 4.7 或更高版本创建的集群不支持该文件,LUKS 设备应当通过 Ignition luks
部分直接配置。
先决条件
- 您已在安装节点上下载了 OpenShift Container Platform 安装程序。
流程
- 检查每个节点的 BIOS 是否需要启用 TPM v2 加密。这在大多数 Dell 系统中是必需的。请参阅您的计算机的相关手册。
在安装节点上,切换到包含安装程序的目录,并为集群生成 Kubernetes 清单:
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
- 将
<installation_directory>
替换为您要存储安装文件的目录的路径。
使用 TPM v2 加密模式为 control plane 或计算节点创建机器配置文件来加密引导磁盘。
重要如果您还要在受影响的节点上配置引导磁盘镜像,请跳过这一步。配置引导磁盘镜像时将配置磁盘加密。
要在 control plane 节点上配置加密,请将以下机器配置示例保存到
<installation_directory>/openshift
目录中的一个文件中。例如,将文件命名为99-openshift-master-tpmv2-encryption.yaml
:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: master-tpm labels: machineconfiguration.openshift.io/role: master spec: config: ignition: version: 3.2.0 storage: luks: - name: root device: /dev/disk/by-partlabel/root clevis: tpm2: true 1 options: [--cipher, aes-cbc-essiv:sha256] wipeVolume: true filesystems: - device: /dev/mapper/root format: xfs wipeFilesystem: true label: root
- 1
- 将此属性设置为
true
以使用受信任的平台模块 (TPM) 安全加密处理器来加密根文件系统。
要在计算节点上配置加密,请将以下机器配置示例保存到
<installation_directory>/openshift
目录中的文件中。例如,将文件命名为99-openshift-worker-tpmv2-encryption.yaml
:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: worker-tpm labels: machineconfiguration.openshift.io/role: worker spec: config: ignition: version: 3.2.0 storage: luks: - name: root device: /dev/disk/by-partlabel/root clevis: tpm2: true 1 options: [--cipher, aes-cbc-essiv:sha256] wipeVolume: true filesystems: - device: /dev/mapper/root format: xfs wipeFilesystem: true label: root
- 1
- 将此属性设置为
true
以使用受信任的平台模块 (TPM) 安全加密处理器来加密根文件系统。
- 创建 YAML 文件的备份副本。创建 Ignition 配置文件时会消耗原始 YAML 文件。
- 继续进行 OpenShift Container Platform 部署的剩余部分。
如果您配置额外的数据分区,除非明确请求加密,否则不会加密它们。
17.1.3.2. 启用 Tang 磁盘加密
使用以下步骤在 OpenShift Container Platform 安装过程中启用 Tang 模式磁盘加密。
在 RHCOS 的早期版本中,磁盘加密是通过在 Ignition 配置中指定 /etc/clevis.json
来配置。使用 OpenShift Container Platform 4.7 或更高版本创建的集群不支持该文件,LUKS 设备应当通过 Ignition luks
部分直接配置。
先决条件
- 您已在安装节点上下载了 OpenShift Container Platform 安装程序。
- 您可以使用 Red Hat Enterprise Linux (RHEL) 8 机器来生成 Tang Exchange 密钥的指纹。
流程
- 设置 Tang 服务器或访问现有服务器。具体步骤请查看网络绑定磁盘加密 。
添加内核参数来配置集群在安装 Red Hat Enterprise Linux CoreOS(RHCOS)时的网络。例如:在内核命令行中添加参数来配置 DHCP 网络,指定
ip=dhcp
,或者设置静态网络。对于 DHCP 和静态网络,您必须提供rd.neednet=1
内核参数。重要跳过这一步会导致第二次引导失败。
如果尚未安装,在 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 绑定问题。
如果您还没有生成 Kubernetes 清单,请切换到安装节点上包含安装程序的目录,并创建它们:
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
- 将
<installation_directory>
替换为您要存储安装文件的目录的路径。
使用 Tang 加密模式,为 control plane 或计算节点创建机器配置文件来加密引导磁盘。
重要如果您还要在受影响的节点上配置引导磁盘镜像,请记录交换密钥的 thumbprint 以供以后使用,并跳过这一步。配置引导磁盘镜像时将配置磁盘加密。
要在 control plane 节点上配置加密,请将以下机器配置示例保存到
<installation_directory>/openshift
目录中的一个文件中。例如,将文件命名为99-openshift-master-tang-encryption.yaml
:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: master-tang labels: machineconfiguration.openshift.io/role: master spec: config: ignition: version: 3.2.0 storage: luks: - name: root device: /dev/disk/by-partlabel/root clevis: tang: - url: http://tang.example.com:7500 1 thumbprint: PLjNyRdGw03zlRoGjQYMahSZGu9 2 options: [--cipher, aes-cbc-essiv:sha256] wipeVolume: true filesystems: - device: /dev/mapper/root format: xfs wipeFilesystem: true label: root kernelArguments: - rd.neednet=1 3
要在计算节点上配置加密,请将以下机器配置示例保存到
<installation_directory>/openshift
目录中的文件中。例如,将文件命名为99-openshift-worker-tang-encryption.yaml
:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: worker-tang labels: machineconfiguration.openshift.io/role: worker spec: config: ignition: version: 3.2.0 storage: luks: - name: root device: /dev/disk/by-partlabel/root clevis: tang: - url: http://tang.example.com:7500 1 thumbprint: PLjNyRdGw03zlRoGjQYMahSZGu9 2 options: [--cipher, aes-cbc-essiv:sha256] wipeVolume: true filesystems: - device: /dev/mapper/root format: xfs wipeFilesystem: true label: root kernelArguments: - rd.neednet=1 3
- 创建 YAML 文件的备份副本。创建 Ignition 配置文件时会消耗原始 YAML 文件。
- 继续进行 OpenShift Container Platform 安装的其余部分。
如果您配置额外的数据分区,除非明确请求加密,否则不会加密它们。
17.1.4. 在安装过程中镜像磁盘
在 control plane 和 compute 节点上安装 OpenShift Container Platform 的过程中,您可以将引导磁盘镜像到两个或者多个冗余存储设备。如果存储设备出现故障,只要有一个设备仍然可用,节点仍将继续正常工作。
当镜像并不支持替换失败的磁盘。要将镜像恢复到正常的非降级状态,需要重新置备该节点。
镜像仅适用于 Red Hat Enterprise Linux CoreOS(RHCOS)系统上的用户置备的基础架构部署。使用 BIOS 或 UEFI 和 ppc64le 节点上的 x86_64 节点上提供镜像支持。
流程
在 OpenShift Container Platform 部署过程中启用引导磁盘镜像:
按照裸机安装过程进行操作,直到为安装创建 Ignition 配置时为止。
例如,您应该输入以下命令:
$ openshift-install create ignition-configs --dir $HOME/clusterconfig
验证是否已创建 Ignition 配置文件:
$ ls $HOME/clusterconfig/
输出示例
auth bootstrap.ign master.ign metadata.json worker.ign
根据您要配置的节点类型,使用
master.ign
或worker.ign
配置的引用来创建 RHCOS Config(RCC)。RCC 必须指定用来引导磁盘镜像的设备。如果要在镜像的根文件系统中进行 LUKS 加密,则必须在这个 RCC 中配置它。以下 RCC 示例演示了如何创建
$HOME/clusterconfig/worker-raid.rcc
:RCC 示例
variant: rhcos version: 0.1.0 ignition: config: merge: - local: worker.ign 1 boot_device: mirror: devices: 2 - /dev/sda - /dev/sdb luks: 3 tpm2: true 4 tang: 5 - url: http://tang.example.com:7500 thumbprint: <tang_thumbprint> storage: 6 luks: - name: root options: [--cipher, aes-cbc-essiv:sha256]
运行 Fedora CoreOS Config Transpiler(FCCT)工具来合并您的 RCC,如
worker-raid.rcc
,使用在上一步中创建的 RCC 中指定的 Ignition 配置:$ podman run --pull=always --rm --volume $HOME/clusterconfig:/pwd --workdir /pwd \ quay.io/coreos/fcct:release --files-dir . worker-raid.rcc --output worker-raid.ign
此命令在
$HOME/clusterconfig/worker-raid.ign
中生成组合的 Ignition 配置。- 使用组合的 Ignition 配置来置备节点,继续 OpenShift Container Platform 部署的剩余部分。
17.1.4.1. 配置一个启用了 RAID 的数据卷
您可以启用软件 RAID 分区以提供外部数据卷。
流程
在 <
installation_directory>/openshift
目录中创建机器配置,以使用软件 RAID 配置数据卷。在本例中,它名为raid1-alt-storage.yaml
:辅助磁盘配置文件中的 RAID 1 示例
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: raid1-alt-storage spec: config: ignition: version: 3.2.0 storage: disks: - device: /dev/sdc partitions: - label: data-1 wipeTable: true - device: /dev/sdd partitions: - label: data-2 wipeTable: true filesystems: - device: /dev/md/md-data format: xfs path: /var/lib/containers wipeFilesystem: true raid: - devices: - /dev/disk/by-partlabel/data-1 - /dev/disk/by-partlabel/data-2 level: raid1 name: md-data systemd: units: - contents: |- [Unit] Before=local-fs.target Requires=systemd-fsck@dev-md-md\x2ddata.service After=systemd-fsck@dev-md-md\x2ddata.service [Mount] Where=/var/lib/containers What=/dev/md/md-data Type=xfs [Install] RequiredBy=local-fs.target enabled: true name: var-lib-containers.mount 1
- 1
- 如果选择其他挂载点,您必须更新单元名称,使其与挂载点对应。否则,单元将不会激活。您可以使用
echo $(systemd-escape -p $mountpoint)生成匹配的单元名称。其中
$mountpoint
是您选择的挂载点。
17.1.5. 配置 chrony 时间服务
您可以通过修改 chrony.conf
文件的内容来设置 chrony 时间服务(chronyd
)使用的时间服务器和相关设置,并通过一个机器配置将这些内容传递给节点。
流程
创建
chrony.conf
文件的内容并对其进行 base64 编码。例如:$ cat << EOF | base64 pool 0.rhel.pool.ntp.org iburst 1 driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony EOF
- 1
- 指定任何有效的、可访问的时间源,如 DHCP 服务器提供的时间源。另外,您可以指定以下 NTP 服务器:
1.rhel.pool.ntp.org
、2.rhel.pool.ntp.org
或3.rhel.pool.ntp.org
。
输出示例
ICAgIHNlcnZlciBjbG9jay5yZWRoYXQuY29tIGlidXJzdAogICAgZHJpZnRmaWxlIC92YXIvbGli L2Nocm9ueS9kcmlmdAogICAgbWFrZXN0ZXAgMS4wIDMKICAgIHJ0Y3N5bmMKICAgIGxvZ2RpciAv dmFyL2xvZy9jaHJvbnkK
创建
MachineConfig
对象文件,将 base64 字符串替换为您刚刚创建的字符串。本例将文件添加到master
节点。您可以将其更改为worker
,或为worker
角色创建额外的 MachineConfig。为集群使用的每种机器创建 MachineConfig 文件:$ cat << EOF > ./99-masters-chrony-configuration.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 99-masters-chrony-configuration spec: config: ignition: config: {} security: tls: {} timeouts: {} version: 3.2.0 networkd: {} passwd: {} storage: files: - contents: source: data:text/plain;charset=utf-8;base64,ICAgIHNlcnZlciBjbG9jay5yZWRoYXQuY29tIGlidXJzdAogICAgZHJpZnRmaWxlIC92YXIvbGliL2Nocm9ueS9kcmlmdAogICAgbWFrZXN0ZXAgMS4wIDMKICAgIHJ0Y3N5bmMKICAgIGxvZ2RpciAvdmFyL2xvZy9jaHJvbnkK mode: 420 1 overwrite: true path: /etc/chrony.conf osImageURL: "" EOF
- 1
- 为机器配置文件的
mode
字段指定数值模式。在创建文件并应用更改后,模式
将转换为十进制值。您可以使用oc get mc <mc-name> -o yaml
命令来检查 YAML 文件。
- 对配置文件做一个备份副本。
使用两种方式之一应用配置:
-
如果集群还没有启动,在生成清单文件后,将此文件添加到
<installation_directory>/openshift
目录中,然后继续创建集群。 如果集群已在运行,请应用该文件:
$ oc apply -f ./99-masters-chrony-configuration.yaml
-
如果集群还没有启动,在生成清单文件后,将此文件添加到
17.1.6. 其他资源
- 如需更多与 FIPS 相关的信息,请参阅 Support for FIPS cryptography。