次の方法で共有


クラスターを Kubernetes 1.25 にアップグレードした後、ポッドでメモリの飽和が発生する

この記事では、Microsoft Azure Kubernetes Service (AKS) クラスターを Kubernetes 1.25. にアップグレードした後に発生するメモリの飽和またはメモリ不足 (OOM) エラーが原因で動作を停止するポッドを修正する方法について説明しますx

現象

次の 1 つ以上の問題が発生します。

  • ノードのメモリ負荷

  • アップグレード前のメモリ使用量と比較した場合のアプリのメモリ使用量の増加

  • ノードでの CPU 調整

  • OOM エラーが原因でポッドが失敗する

パフォーマンスの低下は、次の環境で実行されるアプリで発生する可能性があります。

  • Java ランタイム環境 (JRE) (バージョン 11.0.18 またはバージョン 1.8.0 372 より前のバージョン JRE の場合)
  • バージョン 5.0 より前の .NET バージョン
  • Node.js

パフォーマンスの低下が発生する可能性がある環境のこの一覧は、包括的な一覧ではありません。 メモリの飽和または OOM の問題が発生する他の環境がある可能性があります。

ソリューション

メモリ使用量の増加のみが発生し、 現象 セクションに記載されている他の現象が発生しない場合は、アクションは必要ありません。

Kubernetes 1.25 のリリース以降、 cgroup バージョン 2 API は一般提供 (GA) に達しました。 AKS では、Ubuntu Linux バージョン 22.04 が使用されるようになりました。 既定では、バージョン 22.04 では cgroup バージョン 2 API が使用されます。 メモリの飽和の問題を防ぐために、cgroup バージョン 2 API を他の環境で使用できるようにするには、次のガイダンスに従います。

  • Java アプリケーションを実行する場合は、cgroup バージョン 2 をサポートする Java バージョンにアップグレード Java アプリケーションの Containerizeに関するガイダンスに従ってください。 修正プログラムがバックポートされている特定のバージョンの基本イメージを更新できる場合があります。 cgroup バージョン 2 をネイティブにサポートするバージョンまたはフレームワークを使用します。 Azure のお客様向けに、Microsoft は公式に Eclipse Temurin バイナリ (Java 8) と Microsoft Build of OpenJDK バイナリ (Java 11 以降) をサポートしています。

  • 同様に、.NET を使用している場合は、 .NET バージョン 5.0 以降のバージョンにアップグレードします。

  • ポッドで退去率が高い場合は、ポッドに対してより高い制限とリクエストを設定します

  • cgroup v2 では、 cgroup v1 とは異なる API が使用されます。 cgroup ファイル システムに直接アクセスするアプリケーションがある場合は、cgroup v2 をサポートする新しいバージョンに更新します。 例えば次が挙げられます。

    • サードパーティの監視およびセキュリティ エージェント:

      一部の監視エージェントとセキュリティ エージェントは、 cgroup ファイル システムに依存します。 これらのエージェントを、 cgroup v2 をサポートするバージョンに更新します。

    • Java アプリケーション:

      cgroup v2 を完全にサポートするバージョンを使用します。

      • OpenJDK/HotSpot: jdk8u37211.0.1615、およびそれ以降のバージョン。
      • IBM Semeru Runtimes: 8.0.382.011.0.20.017.0.8.0、およびそれ以降のバージョン。
      • IBM Java: 8.0.8.6 以降のバージョン。
    • uber-go/automaxprocs:
      uber-go/automaxprocs パッケージを使用している場合は、バージョンがv1.5.1以降であることを確認します。

  • 別の一時的な解決策は、DaemonSet を使用してノードの cgroup バージョンを元に戻す方法です。 詳細については、「 cgroup v1 DaemonSet への変換」を参照してください。

    重要

    • DaemonSet は慎重に使用してください。 本番環境に適用する前に、下位の環境でテストして、互換性を確認し、中断を回避します。
    • 既定では、DaemonSet はクラスター内のすべてのノードに適用され、再起動して cgroup 変更を実装します。
    • DaemonSet の適用方法を制御するには、特定のノードをターゲットにするように nodeSelector を構成します。

ステータス

Microsoft は、Kubernetes コミュニティと協力して問題を解決しています。 Azure/AKS の問題 #3443 で進行状況を追跡します。

解決策の一部として、修正の結果に応じて、削除のしきい値を調整したり、 リソース予約を更新したりする計画です。

リファレンス

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

サードパーティのお問い合わせ窓口に関する免責事項

サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。

お問い合わせはこちらから

ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。