×

从 OpenShift Container Platform 4.14 开始,OpenShift Container Platform 在您的集群中使用Linux 控制组版本 2 (cgroup v2)。如果您在 OpenShift Container Platform 4.13 或更早版本上使用 cgroup v1,迁移到 OpenShift Container Platform 4.14 或更高版本不会自动将您的 cgroup 配置更新到版本 2。OpenShift Container Platform 4.14 或更高版本的全新安装将默认使用 cgroup v2。但是,您可以在安装时启用Linux 控制组版本 1 (cgroup v1)。

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

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

cgroup v2 是当前版本的 Linux cgroup API。cgroup v2 提供了比 cgroup v1 许多改进,包括统一的层次结构、更安全的子树委派、新功能(例如压力停顿信息)以及增强的资源管理和隔离。但是,cgroup v2 与 cgroup v1 具有不同的 CPU、内存和 I/O 管理特性。因此,某些工作负载在运行 cgroup v2 的集群上的内存或 CPU 使用率可能会略有差异。

您可以根据需要在 cgroup v1 和 cgroup v2 之间切换。在 OpenShift Container Platform 中启用 cgroup v1 将禁用集群中的所有 cgroup v2 控制器和层次结构。

  • 如果您运行依赖于 cgroup 文件系统的第三方监控和安全代理,请将代理更新到支持 cgroup v2 的版本。

  • 如果您已配置 cgroup v2 并将 cAdvisor 作为独立守护程序集来监控 Pod 和容器,请将 cAdvisor 更新到 v0.43.0 或更高版本。

  • 如果您部署 Java 应用程序,请使用完全支持 cgroup v2 的版本,例如以下软件包

    • OpenJDK/HotSpot:jdk8u372、11.0.16、15 及更高版本

    • NodeJs 20.3.0 或更高版本

    • IBM Semeru Runtimes:jdk8u345-b01、11.0.16.0、17.0.4.0、18.0.2.0 及更高版本

    • IBM SDK Java Technology Edition 版本 (IBM Java):8.0.7.15 及更高版本

配置 Linux cgroup

您可以通过编辑node.config对象来启用Linux 控制组版本 1 (cgroup v1) 或Linux 控制组版本 2 (cgroup v2)。默认值为 cgroup v2。

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

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

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

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

步骤
  1. 在节点上启用 cgroup v1

    1. 编辑node.config对象

      $ oc edit nodes.config/cluster
    2. 编辑spec.cgroupMode参数

      node.config对象示例
      apiVersion: config.openshift.io/v2
      kind: Node
      metadata:
        annotations:
          include.release.openshift.io/ibm-cloud-managed: "true"
          include.release.openshift.io/self-managed-high-availability: "true"
          include.release.openshift.io/single-node-developer: "true"
          release.openshift.io/create-only: "true"
        creationTimestamp: "2022-07-08T16:02:51Z"
        generation: 1
        name: cluster
        ownerReferences:
        - apiVersion: config.openshift.io/v2
          kind: ClusterVersion
          name: version
          uid: 36282574-bf9f-409e-a6cd-3032939293eb
        resourceVersion: "1865"
        uid: 0c0f7a4c-4307-4187-b591-6155695ac85b
      spec:
        cgroupMode: "v1" (1)
      ...
      1 指定v1以启用 cgroup v1 或v2以启用 cgroup v2。
验证
  1. 检查机器配置以查看是否添加了新的机器配置

    $ oc get mc
    示例输出
    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
    97-master-generated-kubelet                        52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    99-worker-generated-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-23d4317815a5f854bd3553d689cfe2e9   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             10s (1)
    rendered-master-23e785de7587df95a4b517e0647e5ab7   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    rendered-worker-5d596d9293ca3ea80c896a1191735bb1   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             33m
    rendered-worker-dcc7f1b92892d34db74d6832bcc9ccd4   52dd3ba6a9a527fc3ab42afac8d12b693534c8c9   3.2.0             10s
    1 按预期创建新的机器配置。
  2. 检查是否已将新的kernelArguments添加到新的机器配置中

    $ oc describe mc <name>
    cgroup v2 的示例输出
    apiVersion: machineconfiguration.openshift.io/v2
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 05-worker-kernelarg-selinuxpermissive
    spec:
      kernelArguments:
        systemd_unified_cgroup_hierarchy=1 (1)
        cgroup_no_v1="all" (2)
        psi=1 (3)
    
    1 在 systemd 中启用 cgroup v2。
    2 禁用 cgroup v1。
    3 启用 Linux 压力停顿信息 (PSI) 功能。
    cgroup v1 的示例输出
    apiVersion: machineconfiguration.openshift.io/v2
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 05-worker-kernelarg-selinuxpermissive
    spec:
      kernelArguments:
        systemd.unified_cgroup_hierarchy=0 (1)
        systemd.legacy_systemd_cgroup_controller=1 (2)
    
    1 禁用 cgroup v2。
    2 在 systemd 中启用 cgroup v1。
  3. 检查节点以查看节点上的调度是否已禁用。这表示正在应用更改

    $ oc get nodes
    示例输出
    NAME                                       STATUS                     ROLES    AGE   VERSION
    ci-ln-fm1qnwt-72292-99kt6-master-0         Ready,SchedulingDisabled   master   58m   v1.30.3
    ci-ln-fm1qnwt-72292-99kt6-master-1         Ready                      master   58m   v1.30.3
    ci-ln-fm1qnwt-72292-99kt6-master-2         Ready                      master   58m   v1.30.3
    ci-ln-fm1qnwt-72292-99kt6-worker-a-h5gt4   Ready,SchedulingDisabled   worker   48m   v1.30.3
    ci-ln-fm1qnwt-72292-99kt6-worker-b-7vtmd   Ready                      worker   48m   v1.30.3
    ci-ln-fm1qnwt-72292-99kt6-worker-c-rhzkv   Ready                      worker   48m   v1.30.3
  4. 节点返回到就绪状态后,为该节点启动一个调试会话

    $ oc debug node/<node_name>
  5. /host设置为调试 shell 中的根目录

    sh-4.4# chroot /host
  6. 检查节点上是否存在sys/fs/cgroup/cgroup2fssys/fs/cgroup/tmpfs文件

    $ stat -c %T -f /sys/fs/cgroup
    cgroup v2 的示例输出
    cgroup2fs
    cgroup v1 的示例输出
    tmpfs