第 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)向后兼容。

流程

  1. https://mirror.openshift.com/pub/openshift-v4/clients/butane/ 的 Butane 镜像下载页面。
  2. 获取 butane 二进制文件:

    1. 对于最新版本的 Butane,将最新的 butane 镜像保存到当前目录中:

      $ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane --output butane
    2. 可选: 对于安装 Butane 的特定类型的架构(如 aarch64 或 ppc64le),指定适当的 URL。例如:

      $ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane-aarch64 --output butane
  3. 使下载的二进制文件可执行:

    $ chmod +x butane
  4. 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 工具。

流程

  1. 创建 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。要进行这两个操作,您可以通过为不同类型的部署使用不同的文件名来重复整个过程。

  2. 通过提供您在上一步中创建的文件来创建 MachineConfig 对象:

    $ butane 99-worker-custom.bu -o ./99-worker-custom.yaml

    已创建一个 MachineConfig 对象 YAML 文件,供您完成机器配置。

  3. 保存 Butane 的配置,以便以后可能需要更新 MachineConfig 对象。
  4. 如果集群还没有运行,生成清单文件,并将 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 安装,最好使用这个流程添加内核参数。

流程

  1. 切换到包含安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory>
  2. 决定是否要在 worker 或 control plane 节点(也称为 master 节点)中添加内核参数。
  3. 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 系统中做到这一点,请执行以下操作:

流程

  1. 注册 RHEL 8 系统:

    # subscription-manager register
  2. 为 RHEL 8 系统添加订阅:

    # subscription-manager attach --auto
  3. 安装构建软件和容器所需的软件:

    # yum install podman make git -y
  4. 克隆 kmod-via-containers 存储库:

    1. 为存储库创建一个文件夹:

      $ mkdir kmods; cd kmods
    2. 克隆存储库:

      $ git clone https://github.com/kmods-via-containers/kmods-via-containers
  5. 在 RHEL 8 构建主机上安装 KVC 框架实例来测试模块。这会添加一个 kmods-via-container systemd 服务并加载它:

    1. 进入 kmod-via-containers 目录:

      $ cd kmods-via-containers/
    2. 安装 KVC 框架实例:

      $ sudo make install
    3. 重新载入 systemd 管理器配置:

      $ sudo systemctl daemon-reload
  6. 获取内核模块源代码。通过源代码,可以构建一个您无法控制但由其他人提供的第三方模块。您需要类似 kvc -simple-kmod 示例中显示的内容 ,使用以下步骤将这些内容克隆到您的系统中:

    $ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod
  7. 编辑示例中的配置文件 simple-kmod.conf,将 Dockerfile 的名称改为 Dockerfile.rhel

    1. 进入 kvc-simple-kmod 目录:

      $ cd kvc-simple-kmod
    2. 重命名 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"

  8. 为您的内核模块创建一个 kmods-via-containers@.service 实例(在这个示例中是 simple-kmod ):

    $ sudo make install
  9. 启用 kmods-via-containers@.service 实例:

    $ sudo kmods-via-containers build simple-kmod $(uname -r)
  10. 启用并启动 systemd 服务:

    $ sudo systemctl enable kmods-via-containers@simple-kmod.service --now
    1. 查看服务状态:

      $ 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...

  11. 要确认载入了内核模块,请使用 lsmod 命令列出模块:

    $ lsmod | grep simple_

    输出示例

    simple_procfs_kmod     16384  0
    simple_kmod            16384  0

  12. 可选。使用其它方法检查 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 节点发送该软件。

流程

  1. 注册 RHEL 8 系统:

    # subscription-manager register
  2. 为 RHEL 8 系统添加订阅:

    # subscription-manager attach --auto
  3. 安装构建软件所需的软件:

    # yum install podman make git -y
  4. 创建用于托管内核模块和工具的目录:

    $ mkdir kmods; cd kmods
  5. 获得 kmods-via-containers 软件:

    1. 克隆 kmod-via-containers 存储库:

      $ git clone https://github.com/kmods-via-containers/kmods-via-containers
    2. 克隆 kvc-simple-kmod 存储库:

      $ git clone https://github.com/kmods-via-containers/kvc-simple-kmod
  6. 获取您的模块软件。本例中使用 kvc-simple-kmod
  7. 使用之前克隆的存储库,创建一个 fakeroot 目录,并将您要通过 Ignition 传递的文件放置到这个目录:

    1. 创建目录:

      $ FAKEROOT=$(mktemp -d)
    2. 进入 kmod-via-containers 目录:

      $ cd kmods-via-containers
    3. 安装 KVC 框架实例:

      $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
    4. 进入 kvc-simple-kmod 目录:

      $ cd ../kvc-simple-kmod
    5. 创建实例:

      $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
  8. 运行以下命令,克隆 fakeroot 目录,用目标的副本替换任何符号链接:

    $ cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree
  9. 创建 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 节点上部署,请对每个节点类型执行一次这些说明的其余部分。
  10. 使用 Butane 生成机器配置 YAML 文件 99-simple-kmod.yaml,其中包含要交付的文件和配置:

    $ butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml
  11. 如果集群还没有启用,生成清单文件并将该文件添加到 openshift 目录中。如果集群已在运行,按照以下方法应用该文件:

    $ oc create -f 99-simple-kmod.yaml

    您的节点将启动 kmods-via-containers@simple-kmod.service 服务,并将载入内核模块。

  12. 为了确认内核模块已加载,您可以登录到节点(使用 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

1
如果要使用受信任的平台模块 (TPM) 加密根文件系统,请包含此字段。
2
如果要使用一个或多个 Tang 服务器,请包含此部分。
3
指定进行解密时必须满足的最小 TPM v2 和 Tang 加密条件。
重要

默认的 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 密钥的指纹。

流程

  1. 如果要使用 TPM v2 加密集群,请检查每个节点的 BIOS 是否需要启用 TPM v2 加密。这在大多数 Dell 系统中是必需的。请参阅您的计算机的相关手册。
  2. 如果要使用 Tang 加密集群,请按照以下步骤操作:

    1. 设置 Tang 服务器或访问现有服务器。具体步骤请查看网络绑定磁盘加密
    2. 如果尚未安装,在 RHEL 8 机器上安装 clevis 软件包:

      $ sudo yum install clevis
    3. 在 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 绑定问题。

    4. 如果节点配置了静态 IP 寻址,在安装 RHCOS 节点时使用 coreos-installer --append-karg 选项来设置已安装系统的 IP 地址。附加您的网络所需的 ip= 和其他参数。

      重要

      某些配置静态 IP 的方法不会在第一次引导后影响 initramfs,也不会使用 Tang 加密。这包括 coreos-installer --copy-network 选项,以及在安装过程中将 ip= 参数添加到 live ISO 或 PXE 镜像的内核命令行中。不正确的静态 IP 配置会导致节点第二次引导失败。

  3. 在安装节点上,切换到包含安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory> 1
    1
    <installation_directory> 替换为您要存储安装文件的目录的路径。
  4. 创建可配置磁盘加密、镜像或两者的 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 模式。

  5. 从对应的 Butane 配置创建一个 control plane 或计算节点清单,并将它保存到 <installation_directory>/openshift 目录。例如,要为计算节点创建清单,请运行以下命令:

    $ butane $HOME/clusterconfig/worker-storage.bu -o <installation_directory>/openshift/99-worker-storage.yaml

    对需要磁盘加密或镜像的每种节点类型重复此步骤。

  6. 保存 Butane 配置,以防将来需要更新清单。
  7. 继续进行 OpenShift Container Platform 安装的其余部分。

    提示

    您可以在安装过程中监控 RHCOS 节点上的控制台日志,以了解与磁盘加密或镜像相关的错误消息。

    重要

    如果您配置额外的数据分区,除非明确请求加密,否则不会加密它们。

验证

安装 OpenShift Container Platform 后,您可以验证是否在集群节点上启用了引导磁盘加密或镜像功能。

  1. 在安装主机上,使用 debug pod 访问集群节点:

    1. 为节点启动 debug pod。以下示例为 compute-1 节点启动 debug pod:

      $ oc debug node/compute-1
    2. /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> 来访问节点。

  2. 如果配置了引导磁盘加密,请验证是否启用它:

    1. 在 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

      1
      加密格式。启用 TPM v2 或 Tang 加密模式时,RHCOS 引导磁盘将使用 LUKS2 格式进行加密。
      2
      用于加密 LUKS2 卷的加密算法。如果启用了 FIPS 模式,则使用 aes-cbc-essiv:sha256 密码。
      3
      包含加密 LUKS2 卷的设备。如果启用了镜像,该值将表示软件镜像设备,如 /dev/md126
    2. 列出绑定到加密设备的 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 插件使用。
  3. 如果配置了镜像 (mirror),请验证是否启用它:

    1. 在 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>

      1
      在这个示例中,/dev/md126 软件 RAID 镜像设备使用集群节点中的 /dev/sda3/dev/sdb3 磁盘设备。
      2
      在这个示例中,/dev/md127 软件 RAID 镜像设备使用集群节点中的 /dev/sda4/dev/sdb4 磁盘设备。
    2. 查看上一命令输出中列出的每个软件 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

      1
      指定设备的 RAID 级别。raid1 表示 RAID 1 磁盘镜像。
      2
      指定 RAID 设备的状态。
      3 4
      指出活跃且正常工作的底层磁盘设备数量。
      5
      说明处于故障状态的底层磁盘设备数量。
      6
      软件 RAID 设备的名称。
      7 8
      提供有关软件 RAID 设备使用的底层磁盘设备的信息。
    3. 列出软件 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

  4. 对每种 OpenShift Container Platform 节点类型重复验证步骤。

其他资源

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 创建机器配置部分。

流程

  1. 创建一个 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

      1 2
      当在引导磁盘中添加数据分区时,推荐最少使用 25000MB。如果没有指定值,或者指定的值小于推荐的最小值,则生成的 root 文件系统会太小,而在以后进行的 RHCOS 重新安装可能会覆盖数据分区的开始部分。
    • 要在辅助磁盘上配置带有 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

  2. 从您在上一步中创建的 Butane 配置创建 RAID 清单,并将它保存到 < installation_directory>/openshift 目录中。例如,要为计算节点创建清单,请运行以下命令:

    $ butane $HOME/clusterconfig/<butane_config>.bu -o <installation_directory>/openshift/<manifest_name>.yaml 1
    1
    <butane_config & gt; 和 <manifest_name > 替换为上一步中的文件名。例如,对于辅助磁盘,raid1-alt-storage.buraid1-alt-storage.yaml
  3. 保存 Butane 配置,以便在以后需要更新清单时使用。
  4. 继续进行 OpenShift Container Platform 安装的其余部分。

17.1.5. 配置 chrony 时间服务

您可以通过修改 chrony.conf 文件的内容来设置 chrony 时间服务(chronyd)使用的时间服务器和相关设置,并通过一个机器配置将这些内容传递给节点。

流程

  1. 创建包含 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
    1 2
    在 control plane 节点上,在这两个位置中使用 worker 替换 master
    3
    为机器配置文件的 mode 字段指定数值模式。在创建文件并应用更改后,模式 将转换为十进制值。您可以使用 oc get mc <mc-name> -o yaml 命令来检查 YAML 文件。
    4
    指定任何有效的、可访问的时间源,如 DHCP 服务器提供的时间源。另外,您可以指定以下 NTP 服务器: 1.rhel.pool.ntp.org2.rhel.pool.ntp.org3.rhel.pool.ntp.org
  2. 使用 Butane 生成 MachineConfig 对象文件 99-worker-chrony.yaml,包含要提供给节点的配置:

    $ butane 99-worker-chrony.bu -o 99-worker-chrony.yaml
  3. 使用两种方式之一应用配置:

    • 如果集群还没有运行,在生成清单文件后,将 MachineConfig 对象文件添加到 <installation_directory>/openshift 目录中,然后继续创建集群。
    • 如果集群已在运行,请应用该文件:

      $ oc apply -f ./99-worker-chrony.yaml

17.1.6. 其他资源