カスタム・イメージを使用したOL8ワーカー・ノードでのCgroups v2の有効化

カスタム・イメージを使用して、Kubernetes Engine (OKE)で作成されたクラスタでOracle Linux 8 (OL8)を実行するワーカー・ノードでcgroup v2を有効にする方法について学習します。

ノート

ビルド番号が1367以上のOKE OL8イメージでは、cgroup v2がデフォルトで有効になっています。ただし、ビルド番号が1367 (およびOL8プラットフォーム・イメージ)より小さいOKE OL8イメージでは、cgroups v1がデフォルトで有効になっています。このトピックでは、ビルド番号が1367より小さいOKE OL8イメージまたはOL8プラットフォーム・イメージを使用するワーカー・ノードをホストするインスタンスのLinuxカーネルでcgroup v2を有効にする方法について説明します。

制御グループ(cgroups)は、プロセスまたはプロセスグループのリソース割り当てを管理および制御するためのメカニズムを提供する Linuxカーネル機能です。cgroups機能を使用すると、システム管理者および開発者は、様々なシステム・リソース(CPU、メモリー、I/O、ネットワーク帯域幅など)を特定のプロセスまたはプロセス・セットに割り当てて制限できます。Cgroupsは、リソースの使用状況を管理するための強力で柔軟な方法を提供し、プロセスが過剰な量の消費を防ぎ、他のプロセスやシステム全体のパフォーマンスに影響を与えることを防ぎながら、必要なリソースを受け取るようにします。管理者は、プロセスを作成して制御グループに編成することで、リソース制約の実施、タスクの優先順位付け、システムの安定性の維持を行うことができます。

Oracle Linuxには、2つのタイプの制御グループが用意されています。

  • 制御グループ・バージョン1 (cgroups v1):これらのグループは、リソースごとのコントローラ階層を提供します。CPU、メモリー、I/Oなどの各リソースには、独自の制御グループ階層があります。cgroups v1の欠点は、異なるプロセス階層に属する可能性のあるグループ間でリソースの使用を調整する難しさです。
  • 制御グループ・バージョン2 (cgroups v2):これらのグループは、すべてのリソース・コントローラがマウントされる単一の制御グループ階層を提供します。この階層では、様々なリソース・コントローラ間でリソースの使用を調整できます。

制御グループおよびOracle Linuxの詳細は、Oracle Linuxドキュメントの制御グループを使用したリソースの管理を参照してください。

Oracle Linux 8 (およびそれ以降のバージョン)には、cgroup v1とcgroup v2の両方が存在します。

ビルド番号が1367以上のOKE OL8イメージでは、cgroups v2がデフォルトで有効になっています。ビルド番号が1367 (およびOL8プラットフォーム・イメージ)より小さいOKE OL8イメージでは、cgroups v1がデフォルトで有効になっています。したがって、ノード・プールのビルド番号が1367 (またはOL8プラットフォーム・イメージ)より小さいOKE OL8イメージを指定すると、ノード・プール内のノードをホストするコンピュート・インスタンスのLinuxカーネルでcgroup v1がデフォルトで有効になります。

ただし、ビルド番号が1367より小さいOKE OL8イメージ(およびOL8プラットフォーム・イメージ)を使用する場合は、cgroup v2を有効にできます。

cgroup v2を有効にするプロセスの概要は、次のとおりです。

ステップ1: 必要なOL8イメージを実行しているコンピュート・インスタンスを作成し、cgroups v2を有効にします

このステップでは、コンピュート・サービスを使用して、Kubernetesクラスタのワーカー・ノードで必要なOL8リリースを実行しているコンピュート・インスタンスを作成します。

  1. ワーカー・ノードで、OL8リリース(およびOKEイメージ(どのKubernetesバージョン)を選択する場合)を決定します。

    Oracleには、多数の異なるOL8 OKEイメージおよびプラットフォーム・イメージが用意されています。

  2. コンピュート・サービス・ドキュメントのインスタンスの作成の手順に従って新しいコンピュート・インスタンスを作成し、適切なプラットフォーム・イメージを選択します(プラットフォーム・イメージを選択するか、OKEイメージのOCIDを指定します)。

    これは、新しいカスタム・イメージの基礎として使用するコンピュート・インスタンスです。

ステップ2: コンピュート・インスタンスでcgroups v2を有効にする

このステップでは、前のステップで作成したコンピュート・インスタンスでcgroups v2を有効にします。この手順は、OL8ドキュメントの「cgroups v2の有効化」の便利なサマリーとして説明されています。

  1. ターミナル・ウィンドウで、次のように入力して、コンピュート・インスタンスに接続し、デフォルトでcgroups v2をマウントするようにすべてのカーネル・ブート・エントリを構成します。
    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
  2. 次を入力して、インスタンスを再起動します。
    sudo reboot
  3. 次のように入力して、cgroups v2がマウントされていることを確認します。
    sudo mount -l | grep cgroup
  4. 必要に応じて、次のように入力して、/sys/fs/cgroupディレクトリ(ルート制御グループ)の内容を確認します。
    ls -l /sys/fs/cgroup/

    cgroups v2の場合、ディレクトリ内のファイルには、ファイル名の最初に接頭辞を付ける必要があります(cgroup.*、cpu.*、memory.*など)。

ステップ3: cgroups v2が有効になっているコンピュート・インスタンスに基づいてカスタム・イメージを作成する

このステップでは、コンピュート・サービスを使用して、前のステップでcgroups v2に対して有効にしたコンピュート・インスタンスからカスタム・イメージを作成します。

  1. 次のように入力して、cgroups v2に対して有効にしたインスタンスを停止します。
    sudo shutdown -h now
  2. コンピュート・サービス・ドキュメントのカスタム・イメージの管理の手順に従って、コンピュート・インスタンスに基づいてカスタム・イメージを作成します。
  3. 作成したカスタム・イメージのOCIDをノートにとります。

ステップ4: cgroups v2が有効なOL8を実行しているワーカー・ノードをクラスタに追加します

このステップでは、前のステップで作成したカスタム・イメージを使用して、cgroups v2が有効なOL8を実行しているワーカー・ノードをKubernetesクラスタに追加します。

cgroups v2を管理対象ノードまたは自己管理ノードのどちらで有効にするかによって、従うべき手順は異なります。管理対象ノードの場合は、管理対象ノード・プールを定義します。自己管理ノードの場合、コンピュート・インスタンスをワーカー・ノードとして追加します。

カスタム・イメージに基づいて管理対象ノードを作成するには、CLIを使用する必要があります。

cgroups v2が有効なOL8を実行している管理対象ノードの追加

cgroups v2が有効なOL8を実行している管理対象ノードを既存のクラスタに追加するには:

  1. コマンド・プロンプトを開き、oci ce node-pool createコマンドを使用して新しいノード・プールを作成します。
  2. コマンドで必要な必須パラメータに加えて、--node-image-idパラメータを含めて、「ステップ3: cgroups v2が有効になっているコンピュート・インスタンスに基づくカスタム・イメージの作成」で作成したカスタム・イメージのOCIDを指定します。

    たとえば、次のコマンドを入力できます。

    oci ce node-pool create \
    --cluster-id ocid1.cluster.oc1.iad.aaaa______m4w \
    --name my-nodepool \
    --node-image-id ocid1.image.oc1.iad.aaaa______zpq \
    --compartment-id ocid1.tenancy.oc1..aaa______q4a \
    --kubernetes-version v1.29.1 \
    --node-shape VM.Standard2.1 \
    --placement-configs "[{\"availabilityDomain\":\"PKGK:US-ASHBURN-AD-1\", \"subnetId\":\"ocid1.subnet.oc1.iad.aaaa______kfa\"}]" \
    --size 3 \
    --region us-ashburn-1

cgroups v2が有効なOL8を実行している自己管理ノードの追加

自己管理ノードを作成する前に:

  • 自己管理ノードを追加するクラスタが自己管理ノードに対して適切に構成されていることを確認します。Cluster Requirementsを参照してください。
  • 自己管理ノードをホストするコンピュート・インスタンスがKubernetes Engineで作成された拡張クラスタに参加できるように、動的グループおよびIAMポリシーがすでに存在することを確認します。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。
  • 自己管理ノードを追加する拡張クラスタのKubernetes APIプライベート・エンドポイントおよびbase64エンコードされたCA証明書を含むcloud-initスクリプトを作成します。「自己管理ノードのCloud-initスクリプトの作成」を参照してください。

コンソールの使用

  1. 自己管理ノードをホストする新しいコンピュート・インスタンスを作成します:
    1. ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
    2. コンピュート・サービスのドキュメントの手順に従って、新しいコンピュート・インスタンスを作成します。新しいコンピュート・インスタンスが拡張クラスタに参加できるようにするには、適切なポリシーが存在する必要があります。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。
    3. 「イメージおよびシェイプ」セクションで、「イメージの変更」を選択します。
    4. 「マイ・イメージ」を選択し、「イメージOCID」オプションを選択して、「ステップ3: cgroups v2が有効になっているコンピュート・インスタンスに基づいてカスタム・イメージを作成する」で作成したカスタム・イメージのOCIDを入力します。
    5. 「拡張オプション」を選択し、「管理」セクションで「cloud-initスクリプトの貼付け」オプションを選択します。
    6. 以前に作成した自己管理ノードのcloud-initスクリプトを「Cloud-initスクリプト」フィールドにコピーして貼り付けます。
    7. 自己管理ノードをホストするコンピュート・インスタンスを作成するには、「作成」を選択します。

    コンピュート・インスタンスが作成されると、cloud-initスクリプトで指定したKubernetes APIエンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。

  2. (オプション)自己管理ノードの作成の手順に従って、自己管理ノードがKubernetesクラスタに追加されたこと、およびラベルがノードに追加され、想定どおりに設定されていることを確認します。

CLIの使用

  1. コマンド・プロンプトを開き、 oci Compute instance launch コマンドおよび必須パラメータを入力して自己管理ノードを作成します。
  2. コマンドで必要な必須パラメータに加えて:
    1. --image-idパラメータを含めて、「ステップ3: cgroups v2が有効になっているコンピュート・インスタンスに基づくカスタム・イメージの作成」で作成したカスタム・イメージのOCIDを指定します。
    2. --user-data-fileパラメータを含めて、以前に作成した自己管理ノードのcloud-initスクリプトを指定します。

    たとえば、次のコマンドを入力できます。

    oci compute instance launch \
    --availability-domain zkJl:PHX-AD-1 \
    --compartment-id ocid1.compartment.oc1..aaaaaaa______neoq \
    --shape VM.Standard2.2 \
    --subnet-id ocid1.subnet.oc1.phx.aaaaaaa______hzia \
    --user-data-file my-selfmgd-cgroupsv2-cloud-init.yaml \
    --image-id ocid1.image.oc1.phx.aaaaaaa______slcr

    コンピュート・インスタンスが作成されると、cloud-initスクリプトで指定したKubernetes APIエンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。