次の方法で共有


Kubernetes 用の Java アプリケーションをコンテナー化する

この記事では、Kubernetes にデプロイするために Java アプリケーションをコンテナー化する方法について説明します。 コンテナー メモリ、JVM ヒープ メモリ、ガベージ コレクター (GC)、vCPU コアに関するガイダンスについては、「Java アプリケーションをコンテナー化する」を参照してください。

Kubernetes ノード プールに適した VM SKU を決定する

クラスターで使用できる Kubernetes ノード プールまたはプールが、使用するコンテナー メモリと vCPU コアに適合できるかどうかを判断します。 ノード プールがアプリケーションをホストできる場合は、続行します。 それ以外の場合は、ターゲットとするコンテナー メモリの量と vCPU コアの数に適したノード プールをプロビジョニングします。

VM SKU のコストは、コアの数とメモリの量に比例します。 1 つのコンテナー インスタンスの vCPU とメモリの観点から開始点を決定したら、水平方向のスケーリングによってのみ、アプリケーションのニーズを満たすことができるかどうかを判断します。 信頼性の高い常時接続システムでは、少なくとも 2 つのレプリカを使用できる必要があります。 必要に応じてスケールアップとスケールアウトを行います。

CPU 要求と制限を設定する

CPU を制限する必要がある場合は、デプロイ ファイル内の limitsrequests の両方に同じ値を適用してください。 JVM は、GC やその他のスレッド プールなどのランタイムを動的に調整しません。 JVM は、起動時にのみ使用可能なプロセッサの数を読み取ります。

ヒント

CPU 要求と CPU 制限に同じ値を設定します。

containers:
- image: myimage
  name: myapp
  resources:
    limits:
      cpu: "2"
    requests:
      cpu: "2"

JVM で使用可能なプロセッサについて

OpenJDK の HotSpot JVM は、コンテナー内で実行されていることを識別すると、cpu_quotacpu_period などの値を使用して、使用可能なプロセッサの数を決定します。 一般に、1000m ミリコアまでの値は、単一のプロセッサ マシンとして識別されます。 1001m2000m の間の値は、デュアル プロセッサ マシンとして識別されます。 この情報は、API Runtime.getRuntime().availableProcessors()から入手できます。 一部の同時実行 PC では、この値を使用してスレッドを構成することもできます。 他の API、ライブラリ、フレームワークでも、この情報を使用してスレッド プールを構成する場合があります。

Kubernetes CPU クォータは、プロセスで使用できる CPU の数ではなく、プロセスが CPU に費やす時間に関連します。 JVM などのマルチスレッド ランタイムでは、複数のプロセッサが同時に使用され、複数のスレッドが使用される場合があります。 コンテナーに 1 つの vCPU の制限がある場合でも、JVM は 2 つ以上の使用可能なプロセッサを表示するように指示される場合があります。

Kubernetes 環境に表示されるプロセッサの正確な数を JVM に通知するには、次の JVM フラグを使用します。

-XX:ActiveProcessorCount=N

メモリ要求と制限を設定する

メモリ制限を、以前に決定した量に設定します。 メモリ制限数がコンテナー メモリであり、JVM ヒープ メモリ値ではないことを確認してください。

ヒント

メモリ要求をメモリ制限と等しく設定します。

containers:
  - name: myimage
    image: myapp
    resources:
      limits:
        memory: "4Gi"
      requests:
        memory: "4Gi"

デプロイ・ファイルで JVM 引数を設定する

JVM ヒープ・メモリーは、前に決定した量に設定してください。 この値を環境変数として渡して、コンテナー イメージを再構築しなくても簡単に変更できるようにすることをお勧めします。

containers:
  - name: myimage
    image: myapp
    env:
    - name: JAVA_OPTS
      value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"

次の手順