cgroup v2 はリソース制御を統合し、メモリ処理を改善し、Kubernetes との互換性を確保します。
Cgroup バージョン
Linux カーネルは、プロセスグループの物理リソース (CPU、メモリ、I/O など) を制限、計測、分離するために、cgroup v1 と cgroup v2 を提供します。cgroup v2 は、統一されたコントローラー モデルにより、v1 の複数階層の問題を解決します。ファイルシステムのインターフェイスは互換性がないため、cgroupfs に直接アクセスするアプリケーションは更新する必要があります。
「Differences between cgroup v1 and cgroup v2」をご参照ください。
Kubernetes v1.31 では cgroup v1 のサポートがメンテナンスモードに移行し、v1.35 でサポートが終了しました。cgroup v2 の主な利点は次のとおりです:
-
安定性の向上:統一されたメモリ計測によりページキャッシュを効果的に管理し、ディスク I/O が高いアプリケーションがメモリを占有して OOMKilled イベントを引き起こすという cgroup v1 の問題を解消します。
-
統一された階層:すべてのリソース コントローラー (CPU、メモリなど) が単一の階層を共有するため、cgroup v1 の並列階層に起因する設定競合を排除できます。
-
リソース可観測性の強化:Pressure Stall Information (PSI) は、CPU、メモリ、I/O でストールした時間を計測し、ボトルネック分析のための粒度の細かいメトリクスを提供します。
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 以降
-
-
ノードを再インストールし、クラスターに再参加させます:
-
ノードを削除: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 を使用している場合は、v1.5.1 以降にアップグレードしてください。 |
|
cAdvisor |
cAdvisor をスタンドアロンの DaemonSet としてデプロイしている場合は、v0.43.0 以降に更新してください。 |
|
Nginx Ingress |
古いバージョンでは、cgroup v2 における CPU コアの解析が不正確なため、OOMKilled エラーが発生する場合があります。v1.11.2 以降にアップグレードしてください。「GitHub Issue #9665」をご参照ください。 ACK の Nginx Ingress コントローラー をアップグレードするには、「Upgrade the Nginx Ingress Controller component」をご参照ください。 |
その他のアプリケーションとコンポーネント
-
サードパーティ製の監視および APM エージェント:Prometheus Node Exporter、Datadog Agent、SkyWalking などのツールは、メトリクス取得のために cgroupfs を読み取ります。互換性のないバージョンでは、データ欠損や異常が発生する可能性があります。cgroup v2 をサポートするバージョンにアップグレードしてください。
-
セキュリティおよび監査ツール:Falco や Sysdig などのツールは、イベントの帰属に cgroup データを使用します。互換性のないバージョンでは、検知ルールの失敗や誤検知が発生する可能性があります。互換性のあるバージョンにアップグレードし、テスト環境でルールを検証してください。
-
パフォーマンスに敏感なアプリケーションおよびカスタムスクリプト:起動スクリプトで cgroup ファイルを読み取り、オートチューニング (CPU クォータに基づいてスレッド数を設定するなど) を行っている場合、cgroup v2 ではパスが変更されるため動作しません。これらのスクリプトを見直し、cgroup v2 向けに更新してください。
本番環境での推奨事項
-
アプリケーションの互換性
cgroup v2 は互換性のないインターフェイスを使用するため、お使いのアプリケーションおよびスクリプトが
cpu.cfs_quota_usなどの cgroup v1 ファイルに依存していないことを確認してください。 -
ノードのカスタム設定
OS を変更すると、ノードはリセットされます。ノードプールの機能を使用して、カスタム変更を永続化してください。関連トピック:
-
監視とアラート:Alibaba Cloud Prometheus monitoring を有効にし、クラスターの健全性とコンテナーのリソース使用量を監視して、迅速な異常検出を行います。