cgroup v2 はリソース制御を統合し、メモリハンドリングを改善し、Kubernetes との互換性を確保します。
Cgroup バージョン
Linux カーネルは、プロセスグループの物理リソース (CPU、メモリ、I/O など) を制限、計測、分離するために cgroup v1 と cgroup v2 を提供します。cgroup v2 は、統一コントローラーモデルにより、v1 の複数階層に起因する問題を解消します。ファイルシステムインターフェイスには互換性がないため、cgroupfs に直接アクセスするアプリケーションは更新する必要があります。
「Differences between cgroup v1 and cgroup v2」をご参照ください。
Kubernetes v 1.31 では cgroup v1 のサポートがメンテナンスモードに移行し、v 1.35 でサポートが廃止されました。cgroup v2 の主な利点は次のとおりです:
-
安定性の向上:統一メモリ計測によりページキャッシュを効果的に管理し、高ディスク I/O のアプリケーションがメモリを先取りして OOMKilled イベントを引き起こすという cgroup v1 の問題を解消します。
-
統一階層:すべてのリソースコントローラー (CPU、メモリなど) が単一の階層を共有するため、cgroup v1 の並列階層に起因する設定競合を排除します。
-
リソースの可観測性の強化:Pressure Stall Information (PSI) は、CPU、メモリ、I/O での待機 (stall) 時間を計測し、ボトルネック分析のための詳細なメトリクスを提供します。
cgroup バージョンの確認
ノードにログオンし、次のコマンドを実行して cgroup バージョンを確認します。
# 対象ノードにログオン後、このコマンドを実行します
stat -fc %T /sys/fs/cgroup/
# 期待される出力:
# cgroup2fs --> cgroup v2 を示します
# tmpfs --> cgroup v1 を示します
移行手順
ノードレベル:オペレーティングシステムの変更
ノードの cgroup バージョンは、そのオペレーティングシステムによって決まります。
-
ノードプールレベルで オペレーティングシステムを変更します。次の オペレーティングシステム は、デフォルトで cgroup v2 を使用します:
-
Alibaba Cloud Linux 3.2104 LTS 64-bit container-optimized
-
Alibaba Cloud Linux 4 LTS 64-bit container-optimized
-
ContainerOS 3.3 以降
-
RHEL 9 以降
-
Ubuntu 22 以降
-
-
ノードを再インストールし、クラスターに再参加させます:
-
ノードを削除します:Container Service for Kubernetes (ACK) クラスターから Lingjun ノードを削除します。必要に応じて、削除前に [ドレイン]を実行できます。
ノードのドレインでは、退去させられた Pod を収容できる十分なリソースを持つ他のノードが必要です。クラスターに十分なキャパシティがあることを確認してください。
-
OS を再インストールします:Lingjun コンソールで、cgroup v2 が有効な OS イメージを使用して ノードを再インストールします。
-
クラスターに再参加させます:Lingjun ノードを追加して ACK クラスターに戻します。
-
-
OS はお客様側で管理します。ノードのアップグレードまたは再参加時の失敗を防ぐため、cgroup v2 と互換性のある OS にアップグレードしてください。
アプリケーションレベル:ワークロード互換性の確保
cgroup v1 と v2 では、ファイルシステム構造とパラメーター名に互換性がありません。/sys/fs/cgroup を直接読み取るアプリケーションは、cgroup v2 向けに検証またはアップグレードする必要があります。
|
カテゴリ |
説明 |
|
Java アプリケーション |
|
|
Go アプリケーション |
uber-go/automaxprocs を使用している場合は、v 1.5.1 以降にアップグレードしてください。 |
|
cAdvisor |
cAdvisor を単体の DaemonSet としてデプロイしている場合は、v 0.43.0 以降に更新してください。 |
|
Nginx Ingress Controller |
古いバージョンでは、cgroup v2 における CPU コア解析の誤りにより OOMKilled エラーが発生する場合があります。v 1.11.2 以降にアップグレードしてください。GitHub Issue #9665 をご参照ください。 ACK の Nginx Ingress Controller をアップグレードするには、「Upgrade the Nginx Ingress Controller component」をご参照ください。 |
その他のアプリケーションとコンポーネント
-
サードパーティの監視および APM エージェント:Prometheus Node Exporter、Datadog Agent、SkyWalking などのツールは、メトリクス取得のために cgroupfs を読み取ります。互換性のないバージョンでは、データ欠損や異常が発生する可能性があります。cgroup v2 をサポートするバージョンにアップグレードしてください。
-
セキュリティおよび監査ツール:Falco や Sysdig などのツールは、イベントの発生元を特定するために cgroup データを使用します。互換性のないバージョンでは、検知ルールが失敗したり誤検知が発生したりする可能性があります。互換性のあるバージョンにアップグレードし、テスト環境でルールを検証してください。
-
パフォーマンスに敏感なアプリケーションおよびカスタムスクリプト:CPU クォータからスレッド数を設定するなど、自動チューニングのために cgroup ファイルを読み取る起動スクリプトは、パス変更により cgroup v2 では失敗します。これらのスクリプトを見直し、cgroup v2 向けに更新してください。
本番環境での推奨事項
-
アプリケーションの互換性
cgroup v2 では互換性のないインターフェイスが使用されるため、アプリケーションおよびスクリプトが
cpu.cfs_quota_usなどの cgroup v1 のファイルに依存していないことを確認してください。 -
カスタムノード設定
OS を変更するとノードはリセットされます。ノードプール機能を使用してカスタム変更を永続化してください。関連トピック:
-
監視とアラート:Alibaba Cloud Prometheus monitoring を有効にして、クラスターの健全性とコンテナのリソース使用状況を監視し、異常を迅速に検知してください。