バージョン 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 サブシステムには、cgroupv1
と cgroupv2
の 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
を実行しているノードを移行する手順は次のとおりです。
- ノードの cgroup モードを確認します。クラスタのノードがすでに
cgroupv2
を使用している場合は、追加の操作は必要ありません。 - 移行に関する考慮事項(cgroup v2 への移行)を確認し、ワークロードが新しいバージョンの API を使用できるように準備されていることを確認します。
各ノードプールのノードシステム構成に次の行を追加して、Standard クラスタのノードを移行します。
linuxConfig: cgroupMode: 'CGROUP_MODE_V2'
cgroupv2
への自動移行を一時的に無効にする
Standard ノードプールを一時的に無効にできます。Autopilot クラスタを一時的に無効にすることはできません。
マイナー バージョン 1.32 以降で cgroupv1
を実行している Standard クラスタ ノードプールを cgroupv2
に自動的に移行しないようにするには、cgroupv1
を明示的に設定する必要があります。
既存の Standard ノードプールの場合は、ノードプールごとにノードシステム構成に次の行を追加します。
linuxConfig:
cgroupMode: 'CGROUP_MODE_V1'
詳細については、ノードシステム構成のカスタマイズをご覧ください。