×

您可以使用本节中的任务创建MachineConfig对象,这些对象可以修改OpenShift Container Platform节点上运行的文件、systemd单元文件和其他操作系统功能。有关使用机器配置的更多想法,请参阅与更新SSH授权密钥、验证镜像签名启用SCTP配置iSCSI启动器名称相关的OpenShift Container Platform内容。

OpenShift Container Platform支持Ignition规范版本3.2。您将来创建的所有新的机器配置都应基于Ignition规范版本3.2。如果您正在升级OpenShift Container Platform集群,任何现有的Ignition规范版本2.x机器配置都将自动转换为规范版本3.2。

在某些情况下,节点上的配置可能与当前应用的机器配置指定的配置不完全匹配。此状态称为配置漂移。机器配置守护程序 (MCD) 定期检查节点的配置漂移。如果MCD检测到配置漂移,则MCO将节点标记为degraded,直到管理员更正节点配置。降级的节点在线且正在运行,但无法更新。有关配置漂移的更多信息,请参阅了解配置漂移检测

使用以下“配置chrony时间服务”过程作为有关如何将其他配置文件添加到OpenShift Container Platform节点的模型。

配置chrony时间服务

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

步骤
  1. 创建一个包含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 在控制平面节点上,在这两个位置将master替换为worker
    2 为机器配置文件中的mode字段指定八进制值模式。创建文件并应用更改后,mode将转换为十进制值。您可以使用命令oc get mc <mc-name> -o yaml检查YAML文件。
    3 指定任何有效且可访问的时间源,例如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 对象文件添加到<安装目录>/openshift 目录中,然后继续创建集群。

    • 如果集群已在运行,请应用该文件。

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

禁用 chrony 时间服务

您可以使用MachineConfig 自定义资源 (CR) 为具有特定角色的节点禁用 chrony 时间服务 (chronyd)。

先决条件
  • 安装 OpenShift CLI (oc)。

  • 以具有cluster-admin 权限的用户身份登录。

步骤
  1. 创建禁用指定节点角色的chronydMachineConfig CR。

    1. 将以下 YAML 保存到disable-chronyd.yaml 文件中

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: <node_role> (1)
        name: disable-chronyd
      spec:
        config:
          ignition:
            version: 3.2.0
          systemd:
            units:
              - contents: |
                  [Unit]
                  Description=NTP client/server
                  Documentation=man:chronyd(8) man:chrony.conf(5)
                  After=ntpdate.service sntp.service ntpd.service
                  Conflicts=ntpd.service systemd-timesyncd.service
                  ConditionCapability=CAP_SYS_TIME
                  [Service]
                  Type=forking
                  PIDFile=/run/chrony/chronyd.pid
                  EnvironmentFile=-/etc/sysconfig/chronyd
                  ExecStart=/usr/sbin/chronyd $OPTIONS
                  ExecStartPost=/usr/libexec/chrony-helper update-daemon
                  PrivateTmp=yes
                  ProtectHome=yes
                  ProtectSystem=full
                  [Install]
                  WantedBy=multi-user.target
                enabled: false
                name: "chronyd.service"
      1 您想要禁用chronyd 的节点角色,例如master
    2. 运行以下命令创建MachineConfig CR

      $ oc create -f disable-chronyd.yaml

向节点添加内核参数

在某些特殊情况下,您可能需要向集群中的一组节点添加内核参数。这应谨慎操作,并清楚理解您设置的参数的影响。

不当使用内核参数可能导致系统无法启动。

您可以设置的内核参数示例包括:

  • nosmt:禁用内核中的对称多线程 (SMT)。多线程允许每个 CPU 拥有多个逻辑线程。在多租户环境中,您可以考虑使用nosmt 来降低潜在的跨线程攻击风险。通过禁用 SMT,您实际上是选择安全性而非性能。

  • systemd.unified_cgroup_hierarchy:启用Linux 控制组版本 2 (cgroup v2)。cgroup v2 是内核控制组的下一个版本,并提供了多项改进。

    cgroup v1 是已弃用的功能。OpenShift Container Platform 中仍然包含已弃用的功能,并且继续受支持;但是,它将在该产品的未来版本中移除,不建议用于新部署。

    有关 OpenShift Container Platform 中已弃用或移除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和已移除的功能”部分。

  • enforcing=0:将 Security Enhanced Linux (SELinux) 配置为在宽容模式下运行。在宽容模式下,系统的作用如同 SELinux 正在强制执行加载的安全策略一样,包括标记对象和在日志中发出访问拒绝条目,但它实际上并不拒绝任何操作。虽然不受生产系统的支持,但宽容模式可用于调试。

    在生产环境中禁用 RHCOS 上的 SELinux 不受支持。在节点上禁用 SELinux 后,必须重新预配才能重新包含在生产集群中。

有关内核参数的列表和说明,请参阅Kernel.org 内核参数

在以下过程中,您将创建一个MachineConfig 对象,该对象标识:

  • 您想要向其添加内核参数的一组机器。在本例中,是具有 worker 角色的机器。

  • 附加到现有内核参数末尾的内核参数。

  • 指示在机器配置列表中应用更改的位置的标签。

先决条件
  • 对正在运行的 OpenShift Container Platform 集群具有管理权限。

步骤
  1. 列出 OpenShift Container Platform 集群的现有MachineConfig 对象,以确定如何标记您的机器配置。

    $ oc get MachineConfig
    示例输出
    NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
    00-master                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    00-worker                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-master-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-master-ssh                                                                                 3.2.0             40m
    99-worker-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-worker-ssh                                                                                 3.2.0             40m
    rendered-master-23e785de7587df95a4b517e0647e5ab7   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    rendered-worker-5d596d9293ca3ea80c896a1191735bb1   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
  2. 创建一个MachineConfig 对象文件,该文件标识内核参数(例如,05-worker-kernelarg-selinuxpermissive.yaml)。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker(1)
      name: 05-worker-kernelarg-selinuxpermissive(2)
    spec:
      kernelArguments:
        - enforcing=0(3)
    1 仅将新的内核参数应用于 worker 节点。
    2 命名以标识其在机器配置中的位置 (05) 及其作用(添加内核参数以配置 SELinux 宽容模式)。
    3 将确切的内核参数标识为enforcing=0
  3. 创建新的机器配置。

    $ oc create -f 05-worker-kernelarg-selinuxpermissive.yaml
  4. 检查机器配置,以确保添加了新的机器配置。

    $ oc get MachineConfig
    示例输出
    NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
    00-master                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    00-worker                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    05-worker-kernelarg-selinuxpermissive                                                         3.2.0             105s
    99-master-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-master-ssh                                                                                 3.2.0             40m
    99-worker-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-worker-ssh                                                                                 3.2.0             40m
    rendered-master-23e785de7587df95a4b517e0647e5ab7   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    rendered-worker-5d596d9293ca3ea80c896a1191735bb1   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
  5. 检查节点。

    $ oc get nodes
    示例输出
    NAME                           STATUS                     ROLES    AGE   VERSION
    ip-10-0-136-161.ec2.internal   Ready                      worker   28m   v1.30.3
    ip-10-0-136-243.ec2.internal   Ready                      master   34m   v1.30.3
    ip-10-0-141-105.ec2.internal   Ready,SchedulingDisabled   worker   28m   v1.30.3
    ip-10-0-142-249.ec2.internal   Ready                      master   34m   v1.30.3
    ip-10-0-153-11.ec2.internal    Ready                      worker   28m   v1.30.3
    ip-10-0-153-150.ec2.internal   Ready                      master   34m   v1.30.3

    您可以看到,由于正在应用更改,每个 worker 节点上的调度都被禁用。

  6. 通过转到其中一个 worker 节点并列出内核命令行参数(在主机上的/proc/cmdline 中),检查内核参数是否有效。

    $ oc debug node/ip-10-0-141-105.ec2.internal
    示例输出
    Starting pod/ip-10-0-141-105ec2internal-debug ...
    To use host binaries, run `chroot /host`
    
    sh-4.2# cat /host/proc/cmdline
    BOOT_IMAGE=/ostree/rhcos-... console=tty0 console=ttyS0,115200n8
    rootflags=defaults,prjquota rw root=UUID=fd0... ostree=/ostree/boot.0/rhcos/16...
    coreos.oem.id=qemu coreos.oem.id=ec2 ignition.platform.id=ec2 enforcing=0
    
    sh-4.2# exit

    您应该看到enforcing=0 参数已添加到其他内核参数中。

在 RHCOS 上使用内核参数启用多路径

在安装过程中启用多路径受支持,并且建议将其用于在 OpenShift Container Platform 4.8 或更高版本中预配的节点。在任何对非优化路径的 I/O 都会导致 I/O 系统错误的设置中,必须在安装时启用多路径。有关在安装时启用多路径的更多信息,请参阅《裸机安装》文档中的“安装后启用多路径”部分。

Red Hat Enterprise Linux CoreOS (RHCOS) 支持在主磁盘上启用多路径,从而增强对硬件故障的恢复能力,以实现更高的主机可用性。可以通过激活机器配置来获得安装后的支持。

在 IBM Z® 和 IBM® LinuxONE 上,只有在安装期间为此配置了集群时,才能启用多路径。有关更多信息,请参阅《使用 IBM Z® 和 IBM® LinuxONE 上的 z/VM 安装集群》中的“安装 RHCOS 并启动 OpenShift Container Platform 引导过程”部分。

当在具有“vSCSI”存储的单个 VIOS 主机上安装或配置 OpenShift Container Platform 4.17 集群(作为 IBM Power® 上配置了多路径的安装后活动)时,启用多路径的 CoreOS 节点将无法启动。此行为是预期的,因为只有一个路径可用于节点。

先决条件
  • 您有一个运行中的 OpenShift Container Platform 集群,该集群使用 4.7 或更高版本。

  • 您已以具有管理权限的用户身份登录到集群。

  • 您已确认磁盘已启用多路径。多路径仅受连接到通过 HBA 适配器连接到 SAN 的主机支持。

步骤
  1. 要在控制平面节点上安装后启用多路径

    • 创建一个机器配置文件,例如99-master-kargs-mpath.yaml,该文件指示集群添加master 标签并标识多路径内核参数,例如

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: "master"
        name: 99-master-kargs-mpath
      spec:
        kernelArguments:
          - 'rd.multipath=default'
          - 'root=/dev/disk/by-label/dm-mpath-root'
  2. 要在 worker 节点上安装后启用多路径

    • 创建一个机器配置文件,例如99-worker-kargs-mpath.yaml,该文件指示集群添加worker 标签并标识多路径内核参数,例如

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: "worker"
        name: 99-worker-kargs-mpath
      spec:
        kernelArguments:
          - 'rd.multipath=default'
          - 'root=/dev/disk/by-label/dm-mpath-root'
  3. 使用之前创建的主 YAML 文件或 worker YAML 文件创建新的机器配置。

    $ oc create -f ./99-worker-kargs-mpath.yaml
  4. 检查机器配置,以确保添加了新的机器配置。

    $ oc get MachineConfig
    示例输出
    NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
    00-master                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    00-worker                                          52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-master-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-container-runtime                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    01-worker-kubelet                                  52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-master-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-master-ssh                                                                                 3.2.0             40m
    99-worker-generated-registries                     52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-worker-kargs-mpath                              52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             105s
    99-worker-ssh                                                                                 3.2.0             40m
    rendered-master-23e785de7587df95a4b517e0647e5ab7   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    rendered-worker-5d596d9293ca3ea80c896a1191735bb1   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
  5. 检查节点。

    $ oc get nodes
    示例输出
    NAME                           STATUS                     ROLES    AGE   VERSION
    ip-10-0-136-161.ec2.internal   Ready                      worker   28m   v1.30.3
    ip-10-0-136-243.ec2.internal   Ready                      master   34m   v1.30.3
    ip-10-0-141-105.ec2.internal   Ready,SchedulingDisabled   worker   28m   v1.30.3
    ip-10-0-142-249.ec2.internal   Ready                      master   34m   v1.30.3
    ip-10-0-153-11.ec2.internal    Ready                      worker   28m   v1.30.3
    ip-10-0-153-150.ec2.internal   Ready                      master   34m   v1.30.3

    您可以看到,由于正在应用更改,每个 worker 节点上的调度都被禁用。

  6. 通过转到其中一个 worker 节点并列出内核命令行参数(在主机上的/proc/cmdline 中),检查内核参数是否有效。

    $ oc debug node/ip-10-0-141-105.ec2.internal
    示例输出
    Starting pod/ip-10-0-141-105ec2internal-debug ...
    To use host binaries, run `chroot /host`
    
    sh-4.2# cat /host/proc/cmdline
    ...
    rd.multipath=default root=/dev/disk/by-label/dm-mpath-root
    ...
    
    sh-4.2# exit

    您应该会看到添加的内核参数。

其他资源

向节点添加实时内核

某些 OpenShift Container Platform 工作负载需要高度的确定性。虽然 Linux 不是实时操作系统,但 Linux 实时内核包含一个抢占式调度程序,该调度程序为操作系统提供实时特性。

如果您的 OpenShift Container Platform 工作负载需要这些实时特性,您可以将您的机器切换到 Linux 实时内核。对于 OpenShift Container Platform 4.17,您可以使用MachineConfig对象进行此切换。虽然更改很简单,只需将机器配置kernelType设置更改为realtime,但在进行更改之前还需要考虑其他一些因素。

  • 目前,实时内核仅在 worker 节点上受支持,并且仅限于无线接入网 (RAN) 使用。

  • 以下过程完全支持使用经过 Red Hat Enterprise Linux for Real Time 8 认证的系统的裸机安装。

  • OpenShift Container Platform 中的实时支持仅限于特定订阅。

  • 以下过程也支持与 Google Cloud Platform 一起使用。

先决条件
  • 拥有一个正在运行的 OpenShift Container Platform 集群(版本 4.4 或更高版本)。

  • 以具有管理员权限的用户身份登录集群。

步骤
  1. 为实时内核创建机器配置:创建一个 YAML 文件(例如,99-worker-realtime.yaml),其中包含用于realtime内核类型的MachineConfig对象。此示例告诉集群对所有 worker 节点使用实时内核。

    $ cat << EOF > 99-worker-realtime.yaml
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: "worker"
      name: 99-worker-realtime
    spec:
      kernelType: realtime
    EOF
  2. 将机器配置添加到集群。键入以下命令将机器配置添加到集群。

    $ oc create -f 99-worker-realtime.yaml
  3. 检查实时内核:每个受影响的节点重新引导后,登录到集群并运行以下命令以确保实时内核已替换您配置的节点集的常规内核。

    $ oc get nodes
    示例输出
    NAME                                        STATUS  ROLES    AGE   VERSION
    ip-10-0-143-147.us-east-2.compute.internal  Ready   worker   103m  v1.30.3
    ip-10-0-146-92.us-east-2.compute.internal   Ready   worker   101m  v1.30.3
    ip-10-0-169-2.us-east-2.compute.internal    Ready   worker   102m  v1.30.3
    $ oc debug node/ip-10-0-143-147.us-east-2.compute.internal
    示例输出
    Starting pod/ip-10-0-143-147us-east-2computeinternal-debug ...
    To use host binaries, run `chroot /host`
    
    sh-4.4# uname -a
    Linux <worker_node> 4.18.0-147.3.1.rt24.96.el8_1.x86_64 #1 SMP PREEMPT RT
            Wed Nov 27 18:29:55 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

    内核名称包含rt,并且文本“PREEMPT RT”表示这是一个实时内核。

  4. 要返回到常规内核,请删除MachineConfig对象。

    $ oc delete -f 99-worker-realtime.yaml

配置 journald 设置

如果您需要配置 OpenShift Container Platform 节点上journald服务的设置,您可以通过修改相应的配置文件并将文件作为机器配置传递到相应的节点池来实现。

此过程描述了如何在/etc/systemd/journald.conf文件中修改journald速率限制设置并将它们应用于 worker 节点。有关如何使用该文件的详细信息,请参阅journald.conf手册页。

先决条件
  • 拥有一个正在运行的 OpenShift Container Platform 集群。

  • 以具有管理员权限的用户身份登录集群。

步骤
  1. 创建一个 Butane 配置文件 40-worker-custom-journald.bu,其中包含具有所需设置的/etc/systemd/journald.conf文件。

    有关Butane的信息,请参见“使用Butane创建机器配置”。

    variant: openshift
    version: 4.17.0
    metadata:
      name: 40-worker-custom-journald
      labels:
        machineconfiguration.openshift.io/role: worker
    storage:
      files:
      - path: /etc/systemd/journald.conf
        mode: 0644
        overwrite: true
        contents:
          inline: |
            # Disable rate limiting
            RateLimitInterval=1s
            RateLimitBurst=10000
            Storage=volatile
            Compress=no
            MaxRetentionSec=30s
  2. 使用 Butane 生成一个MachineConfig对象文件40-worker-custom-journald.yaml,其中包含要交付给 worker 节点的配置。

    $ butane 40-worker-custom-journald.bu -o 40-worker-custom-journald.yaml
  3. 将机器配置应用于节点池。

    $ oc apply -f 40-worker-custom-journald.yaml
  4. 检查新的机器配置是否已应用以及节点是否未处于降级状态。这可能需要几分钟。每个节点成功应用新的机器配置后,worker 节点池将显示更新进度。

    $ oc get machineconfigpool
    NAME   CONFIG             UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
    master rendered-master-35 True    False    False    3            3                 3                   0                    34m
    worker rendered-worker-d8 False   True     False    3            1                 1                   0                    34m
  5. 要检查更改是否已应用,您可以登录到 worker 节点。

    $ oc get node | grep worker
    ip-10-0-0-1.us-east-2.compute.internal   Ready    worker   39m   v0.0.0-master+$Format:%h$
    $ oc debug node/ip-10-0-0-1.us-east-2.compute.internal
    Starting pod/ip-10-0-141-142us-east-2computeinternal-debug ...
    ...
    sh-4.2# chroot /host
    sh-4.4# cat /etc/systemd/journald.conf
    # Disable rate limiting
    RateLimitInterval=1s
    RateLimitBurst=10000
    Storage=volatile
    Compress=no
    MaxRetentionSec=30s
    sh-4.4# exit

向 RHCOS 添加扩展

RHCOS 是一种最小化的面向容器的 RHEL 操作系统,旨在为所有平台上的 OpenShift Container Platform 集群提供一组通用的功能。虽然通常不建议向 RHCOS 系统添加软件包,但 MCO 提供了一个extensions功能,您可以使用它向 RHCOS 节点添加最小的功能集。

目前,提供以下扩展:

  • usbguard:添加usbguard扩展可以保护 RHCOS 系统免受侵入式 USB 设备的攻击。有关详细信息,请参阅USBGuard

  • kerberos:添加kerberos扩展提供了一种机制,允许用户和机器向网络标识自己,以接收管理员已配置的区域和服务的已定义的有限访问权限。有关详细信息,包括如何设置 Kerberos 客户端和挂载 Kerberized NFS 共享,请参阅使用 Kerberos

以下过程描述了如何使用机器配置向您的 RHCOS 节点添加一个或多个扩展。

先决条件
  • 拥有一个正在运行的 OpenShift Container Platform 集群(版本 4.6 或更高版本)。

  • 以具有管理员权限的用户身份登录集群。

步骤
  1. 为扩展创建机器配置:创建一个 YAML 文件(例如,80-extensions.yaml),其中包含MachineConfig extensions对象。此示例告诉集群添加usbguard扩展。

    $ cat << EOF > 80-extensions.yaml
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 80-worker-extensions
    spec:
      config:
        ignition:
          version: 3.2.0
      extensions:
        - usbguard
    EOF
  2. 将机器配置添加到集群。键入以下命令将机器配置添加到集群。

    $ oc create -f 80-extensions.yaml

    这将设置所有 worker 节点以安装usbguard的 rpm 包。

  3. 检查扩展是否已应用。

    $ oc get machineconfig 80-worker-extensions
    示例输出
    NAME                 GENERATEDBYCONTROLLER IGNITIONVERSION AGE
    80-worker-extensions                       3.2.0           57s
  4. 检查新的机器配置是否已应用以及节点是否未处于降级状态。这可能需要几分钟。每个机器成功应用新的机器配置后,worker 节点池将显示更新进度。

    $ oc get machineconfigpool
    示例输出
    NAME   CONFIG             UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
    master rendered-master-35 True    False    False    3            3                 3                   0                    34m
    worker rendered-worker-d8 False   True     False    3            1                 1                   0                    34m
  5. 检查扩展。要检查扩展是否已应用,请运行以下命令:

    $ oc get node | grep worker
    示例输出
    NAME                                        STATUS  ROLES    AGE   VERSION
    ip-10-0-169-2.us-east-2.compute.internal    Ready   worker   102m  v1.30.3
    $ oc debug node/ip-10-0-169-2.us-east-2.compute.internal
    示例输出
    ...
    To use host binaries, run `chroot /host`
    sh-4.4# chroot /host
    sh-4.4# rpm -q usbguard
    usbguard-0.7.4-4.el8.x86_64.rpm

在机器配置清单中加载自定义固件 blob

由于/usr/lib中固件 blob 的默认位置是只读的,您可以通过更新搜索路径来查找自定义固件 blob。这使您可以在固件 blob 不由 RHCOS 管理时,在机器配置清单中加载本地固件 blob。

步骤
  1. 创建一个 Butane 配置文件 98-worker-firmware-blob.bu,更新搜索路径使其属于 root 用户并可写入本地存储。以下示例将自定义 blob 文件从您的本地工作站复制到节点上的/var/lib/firmware

    有关Butane的信息,请参见“使用Butane创建机器配置”。

    自定义固件 blob 的 Butane 配置文件
    variant: openshift
    version: 4.17.0
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 98-worker-firmware-blob
    storage:
      files:
      - path: /var/lib/firmware/<package_name> (1)
        contents:
          local: <package_name> (2)
        mode: 0644 (3)
    openshift:
      kernel_arguments:
        - 'firmware_class.path=/var/lib/firmware' (4)
    1 设置节点上复制固件包的路径。
    2 指定一个文件,其内容从运行 Butane 的系统上的本地文件目录读取。本地文件的路径相对于files-dir目录,必须使用下一步中的 Butane 使用--files-dir选项指定。
    3 设置 RHCOS 节点上文件的权限。建议设置0644权限。
    4 firmware_class.path参数自定义内核搜索路径,用于查找从您的本地工作站复制到节点根文件系统的自定义固件 blob。此示例使用/var/lib/firmware作为自定义路径。
  2. 运行 Butane 生成一个MachineConfig对象文件,该文件使用名为98-worker-firmware-blob.yaml的本地工作站上的固件 blob 副本。固件 blob 包含要交付给节点的配置。以下示例使用--files-dir选项指定本地文件或文件所在的本地工作站目录。

    $ butane 98-worker-firmware-blob.bu -o 98-worker-firmware-blob.yaml --files-dir <directory_including_package_name>
  3. 通过以下两种方式之一将配置应用于节点。

    • 如果集群尚未运行,在生成清单文件后,将MachineConfig 对象文件添加到<安装目录>/openshift 目录中,然后继续创建集群。

    • 如果集群已在运行,请应用该文件。

      $ oc apply -f 98-worker-firmware-blob.yaml

      将为您创建一个MachineConfig对象 YAML 文件,以便您完成机器的配置。

  4. 保存 Butane 配置,以防您将来需要更新MachineConfig对象。

更改节点访问的核心用户密码

默认情况下,Red Hat Enterprise Linux CoreOS (RHCOS) 会在集群中的节点上创建一个名为core的用户。您可以使用core用户通过云提供商串行控制台或裸机底板控制器管理器 (BMC) 访问节点。例如,如果节点已关闭并且您无法使用 SSH 或oc debug node命令访问该节点,这将非常有用。但是,默认情况下,此用户没有密码,因此您无法在没有创建密码的情况下登录。

您可以使用机器配置为core用户创建密码。机器配置操作符 (MCO) 会分配密码并将其注入到/etc/shadow文件中,允许您使用core用户登录。MCO不会检查密码哈希。因此,MCO无法报告密码是否存在问题。

  • 此密码仅适用于云提供商串行控制台或BMC。它不适用于SSH。

  • 如果您有一个包含/etc/shadow文件或设置密码的systemd单元的机器配置,它将优先于密码哈希。

如有需要,您可以通过编辑用于创建密码的机器配置来更改密码。此外,您可以通过删除机器配置来删除密码。删除机器配置不会删除用户帐户。

步骤
  1. 使用操作系统支持的工具创建哈希密码。例如,使用mkpasswd运行以下命令创建哈希密码

    $ mkpasswd -m SHA-512 testpass
    示例输出
    $ $6$CBZwA6s6AVFOtiZe$aUKDWpthhJEyR3nnhM02NM1sKCpHn9XN.NPrJNQ3HYewioaorpwL3mKGLxvW0AOb4pJxqoqP4nFX77y0p00.8.
  2. 创建一个包含core用户名和哈希密码的机器配置文件

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: set-core-user-password
    spec:
      config:
        ignition:
          version: 3.2.0
        passwd:
          users:
          - name: core (1)
            passwordHash: <password> (2)
    
    1 这必须是core
    2 用于core帐户的哈希密码。
  3. 运行以下命令创建机器配置

    $ oc create -f <file-name>.yaml

    节点不会重启,几分钟后应该可用。您可以使用oc get mcp来监视机器配置池的更新,如下例所示

    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-d686a3ffc8fdec47280afec446fce8dd   True      False      False      3              3                   3                     0                      64m
    worker   rendered-worker-4605605a5b1f9de1d061e9d350f251e5   False     True       False      3              0                   0                     0                      64m
验证
  1. 节点返回到UPDATED=True状态后,运行以下命令启动节点的调试会话

    $ oc debug node/<node_name>
  2. 运行以下命令将/host设置为调试shell中的根目录

    sh-4.4# chroot /host
  3. 检查/etc/shadow文件的内容

    示例输出
    ...
    core:$6$2sE/010goDuRSxxv$o18K52wor.wIwZp:19418:0:99999:7:::
    ...

    哈希密码已分配给core用户。