14.2.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存储库。这必须包括新内核软件包,因为它们需要与新安装的内核相匹配。
14.2.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.1.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