今回は Red Hat OpenShift on IBM Cloud で Worker Node の OS の種類ごとに cgroup のバージョンを調べてみました。
実際に調べてみた
ワーカーノード OS についてバージョンアップを検討する場合、バージョンアップ後の OS におけるミドルウェアやアプリケーションなどワークロードのサポート状況を調べる必要があります。最近では意識する必要がある点として、cgroup の v1 と v2 のどちらを利用しているかという点があります。例えば Java のワークロードで古いバージョンの実行環境を使用している場合、 cgroup v2 が有効化されている環境で稼働させると、メモリーリークが発生することなどがわかっています。ミドルウェアを新しいバージョンにする場合、そのテストを行う必要があるだけでなく、場合によってはソフトウェアの稼働スタックの更新にあわせてアプリケーションの更新が必要になってしまいます。
記事執筆時点の 2024 年 12 月に選択可能なワーカーノードの OS は以下の 3 種類です。OpenShift のバージョンやインフラストラクチャーの種類 (Classic IaaS/VPC) により利用できるワーカーノード OS がこれより少ないケースもありますが、今回はすべての選択肢を利用可能な VPC 上で稼働する OpenShift クラスター バージョン 4.16 で試しました。
- Red Hat Enterprise Linux Core OS (RHCOS)
- Red Hat Enterprise Linux 9 (RHEL9)
- Red Hat Enterprise Linux 8 (RHEL8)
ワーカーノードの OS の種類ごとに別々のクラスターを作成し、それぞれのクラスターのワーカーノードに oc debug
コマンドを使ってアクセスして cgroup のバージョンを調べます。
調べ方は参考資料の Identify the cgroup version on Linux Nodes
に記載がある通り、 stat -fc %T /sys/fs/cgroup/
コマンドを利用します。
実際に実行したコマンドと結果をワーカーノード OS ごとに示します。
最後のコマンドの実行で cgroup2fs
となっている場合には cgroupv2
、tmpfs
となっている場合には cgroupv1
が利用されています。
% ibmcloud ks cluster config --cluster mycluster-RHCOS --admin
OK
The configuration for mycluster-RHCOS was downloaded successfully.
Added context for mycluster-RHCOS to the current kubeconfig file.
You can now run 'kubectl' commands against your cluster. For example, run 'kubectl get nodes'.
% oc get nodes
NAME STATUS ROLES AGE VERSION
kube-cti2i6et038cekgjto0g-myclusterjp-default-000001cc Ready master,worker 15h v1.29.10+67d3387
kube-cti2i6et038cekgjto0g-myclusterjp-default-0000020a Ready master,worker 15h v1.29.10+67d3387
% oc debug node/kube-cti2i6et038cekgjto0g-myclusterjp-default-000001cc
Warning: metadata.name: this is used in the Pod's hostname, which can result in surprising behavior; a DNS label is recommended: [must be no more than 63 characters]
Starting pod/kube-cti2i6et038cekgjto0g-myclusterjp-default-000001cc-debug-swntr ...
To use host binaries, run `chroot /host`
Pod IP: 192.168.3.41
If you don't see a command prompt, try pressing enter.
sh-5.1# stat -fc %T /sys/fs/cgroup/
cgroup2fs
% ibmcloud ks cluster config --cluster mycluster-RHEL9 --admin
OK
The configuration for mycluster-RHEL9 was downloaded successfully.
Added context for mycluster-RHEL9 to the current kubeconfig file.
You can now run 'kubectl' commands against your cluster. For example, run 'kubectl get nodes'.
% oc get nodes
NAME STATUS ROLES AGE VERSION
192.168.3.34 Ready master,worker 22h v1.29.10+67d3387
192.168.3.36 Ready master,worker 22h v1.29.10+67d3387
% oc debug node/192.168.3.34
Starting pod/192168334-debug-9j5gx ...
To use host binaries, run `chroot /host`
Pod IP: 192.168.3.34
If you don't see a command prompt, try pressing enter.
sh-5.1# stat -fc %T /sys/fs/cgroup/
cgroup2fs
% ibmcloud ks cluster config --cluster mycluster-RHEL8 --admin
OK
The configuration for mycluster-RHEL8 was downloaded successfully.
Added context for mycluster-RHEL8 to the current kubeconfig file.
You can now run 'kubectl' commands against your cluster. For example, run 'kubectl get nodes'.
% oc get nodes
NAME STATUS ROLES AGE VERSION
192.168.3.11 Ready master,worker 44h v1.29.10+67d3387
192.168.3.22 Ready master,worker 44h v1.29.10+67d3387
% oc debug node/192.168.3.11
Starting pod/192168311-debug-swhzr ...
To use host binaries, run `chroot /host`
Pod IP: 192.168.3.11
If you don't see a command prompt, try pressing enter.
sh-5.1# stat -fc %T /sys/fs/cgroup/
tmpfs
まとめ
ワーカーノードのOSごとにcgroupは以下のバージョンのものが利用されていると言えそうです。
- Red Hat Enterprise Linux Core OS (RHCOS) >> cgroup v2
- Red Hat Enterprise Linux 9 (RHEL9) >> cgroup v2
- Red Hat Enterprise Linux 8 (RHEL8) >> cgroup v1
OCP 4.14 以前のバージョンではワーカーノードの OS として RHEL8 が唯一の選択肢ですが、それより新しい OCP 4.15 以降のバージョンでは選択肢が増えます。こケースでは既存のワークロードが cgroup v2 に対応しているか確認/検証してご利用いただきたいです、