ノードの Linux cgroupv2 への移行


バージョン 1.32 以降、Google Kubernetes Engine(GKE)は cgroupv1 を実行しているクラスタを cgroupv2 に移行します。このページでは、次の方法について説明します。

  • クラスタのノードが実行されている cgroup モードと、ワークロードが cgroup モード間の移行の影響を受ける可能性があるかどうかを確認します。
  • GKE Standard クラスタのノードプールを cgroupv2 に移行します。
  • GKE を一時的に無効にします。これにより、cgroupv1 を使用しているノードプールが自動的に cgroupv2 に移行されます。cgroup モードの移行による影響を受ける可能性があるワークロードをクラスタで実行している場合は、次の手順に沿って操作します。

Standard ノードプールは、手動で移行することも、一時的に無効にすることもできます。Autopilot クラスタの移行および一時的な無効化はできません。

ワークロードが cgroupv2 で想定どおりに実行されていること、または cgroup モードの構成の影響を受けないことがわかっている場合は、このページをお読みになる必要はありません。バージョン 1.32 以降では、GKE は cgroupv1 を実行しているクラスタを cgroupv2 に自動的に移行します。

Linux コントロール グループについて

kubelet とコンテナ ランタイムは、Pod 内の各コンテナがアクセスできる CPU やメモリの量の制限など、リソース管理に Linux カーネルのコントロール グループ(cgroups)を使用します。カーネルの cgroup サブシステムには、cgroupv1cgroupv2 の 2 つのモードがあります。cgroupv2 の Kubernetes サポートは、Kubernetes v1.18 でアルファ版、v1.22 でベータ版、v1.25 で一般提供されました。詳細については、Kubernetes cgroups v2 のドキュメントをご覧ください。

Standard クラスタの cgroup モードの構成については、Linux cgroup モード構成オプションをご覧ください。

GKE が cgroupv2 に移行する仕組み

次のタイムラインを確認して、cgroupv2 を使用するために GKE が既存のクラスタを移行する過程を確認してください。

  • 1.26 より前のバージョンでは、cgroupv1 がノードのデフォルトでした。バージョン 1.26 以降では、cgroupv2 が新しいノードのデフォルトです。既存のノードには変更はありません。GKE クラスタがデフォルトで実行する cgroup モードの詳細については、クラスタノードの cgroup モードを確認するをご覧ください。
  • GKE では、マイナー バージョン 1.31 で cgroupv1 が非推奨になりました。
  • バージョン 1.32 以降、GKE は cgroupv1 を実行しているクラスタを cgroupv2 に移行します。この自動移行を一時的に防ぐには、ノードプールが cgroupv1 を使用することを明示的に指定します。
  • GKE は、マイナー バージョン 1.34 で cgroupv1 のサポートを終了します。

1.31 や 1.32 などの新しいマイナー バージョンへの自動アップグレードのおおよそのタイミングについては、リリース チャンネルのおおよそのスケジュールをご覧ください。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

クラスタノードの cgroup モードを確認する

デフォルトの cgroup モードは、クラスタまたはノードプールのタイプとバージョンによって異なります。バージョン 1.26 以降では、デフォルトは cgroupv2 です。バージョン 1.25 以前では、デフォルトは cgroupv1 です。

  • Autopilot クラスタと、ノード自動プロビジョニングで作成された新しい Standard クラスタ ノードプールの場合、cgroup モードは最初のクラスタ バージョンに基づいています。
  • ノード自動プロビジョニングを使用せずに手動で作成された Standard クラスタ ノードプールの場合、cgroup モードは最初のノードプール バージョンに基づいています。

cgroup モードを確認するには、クラスタモードに基づいていずれかの手順に沿って操作します。

Autopilot

次のコマンドを実行します。CLUSTER_NAME は、クラスタの名前に置き換えます。

gcloud container clusters describe CLUSTER_NAME \
    --format='value(initialClusterVersion)'

GKE バージョン 1.25 以前で最初に作成された GKE Autopilot クラスタは cgroupv1 を実行します。バージョン 1.26 以降で最初に作成されたクラスタは cgroupv2 を実行します。

Standard

GKE Standard クラスタでは、cgroup モードはノードプール レベルで設定されます。個々のノードプールのモードを確認するには、cgroup 構成を確認するの手順に沿って操作します。クラスタのノードがすでに cgroupv2 を使用している場合は、追加の操作は必要ありません。

ノードを cgroupv2 に移行する

バージョン 1.32 以降で GKE が既存のノードを自動的に移行する前に、既存のノードを移行しておくことをおすすめします。Standard ノードプールは手動で移行できます。Autopilot クラスタを移行することはできません。

cgroupv1 を実行しているノードを移行する手順は次のとおりです。

  1. ノードの cgroup モードを確認します。クラスタのノードがすでに cgroupv2 を使用している場合は、追加の操作は必要ありません。
  2. 移行に関する考慮事項(cgroup v2 への移行)を確認し、ワークロードが新しいバージョンの API を使用できるように準備されていることを確認します。
  3. 各ノードプールのノードシステム構成に次の行を追加して、Standard クラスタのノードを移行します。

      linuxConfig:
      cgroupMode: 'CGROUP_MODE_V2'
    

cgroupv2 への自動移行を一時的に無効にする

Standard ノードプールを一時的に無効にできます。Autopilot クラスタを一時的に無効にすることはできません。

マイナー バージョン 1.32 以降で cgroupv1 を実行している Standard クラスタ ノードプールを cgroupv2 に自動的に移行しないようにするには、cgroupv1 を明示的に設定する必要があります。

既存の Standard ノードプールの場合は、ノードプールごとにノードシステム構成に次の行を追加します。

linuxConfig:
  cgroupMode: 'CGROUP_MODE_V1'

詳細については、ノードシステム構成のカスタマイズをご覧ください。