LoginSignup
4
3

More than 1 year has passed since last update.

Javaで作られたWEBアプリケーションの運用にあたってJVMのパラメータをKubernetesマニフェストで管理する

Last updated at Posted at 2022-08-23

はじめに

皆さんこんにちはasmgです。今回は、Javaで作られたWEBアプリケーションの運用にあたってJVMのパラメータをKubernetesマニフェストで管理するタスクを行なったので実現した方法を記載していこうと思います。

本記事の対象者

本記事は、JVMのパラメータをKubernetes マニフェストで管理することに着目しているのでkubernetesやJVMについて言及はしません。なので、KubernetesやJVMのパラメータは理解していることを前提としています。

本記事の実行環境

検証機

  • Mac Book pro 14inch M1 Pro

検証環境

  • kind(Kubernetes in Docker)

現状のJVMのパラメータの管理方法

現状、JVMの管理は以下のように行っていました。

Dockerfile
FROM openjdk:8-jdk-oraclelinux8
COPY ./target /
CMD ["./apply.sh", "./app.jar"]
apply.sh
#!/bin/sh
java \
  -XX:PermSize=128M \
  -jar ${1}
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - name: sample-spring-boot
        image: sample-spring-boot:latest
        imagePullPolicy: IfNotPresent
      env:
      - name: hogehoge
        value: "hogehoge"

※スクリプトやDockerfileは本記用に簡単に記述しています。
※今回設定している-XXパラメータには特に意味はありません。

現状の管理方法の問題

上記のような構成でDockerfileを作成すると、JVMのパラメータを修正するタイミングやアプリケーションを更新するタイミングでbuildする必要があります。この構成だと、パラメータを修正するたびにimageをBuildしないといけないため、簡単にパラメータを修正することができません。なので、本記事ではJVMのパラメータをkubernetesのマニフェストで修正できるようにしていきたいと思います。

JVMのパラメータをKubernetesマニフェストで管理する方法

KubernetesのマニフェストファイルのenvにJavaの公式で提供されている環境変数JAVA_TOOL_OPTIONSを追加してここにJVMのパラメータを記載します。

deployment.yaml
...一部省略...
        env:
        - name: JAVA_TOOL_OPTIONS
          value: "-XX:PermSize=129M"

kubernetesのマニフェストファイルの変数にJAVA_TOOL_OPTIONSを記載することで、kubernetesのマニフェストファイル上で、JVMパラメータを管理することができます。
kubernetesのマニフェストファイルでJVMパラメータを記載しているので、apply.shで記述している部分は削除することができます。

注意点

JVMのパラメータの環境変数JAVA_TOOL_OPTIONSと類似するもので、JAVA_OPTSというものがあります。
JAVA VMでは、JAVA_OPTSは、非公式な環境変数のようです。kubernetesのマニフェストで設定する際にJAVA_OPTSは利用できなかったので、JAPA_TOOL_OPTIONSを利用するのが良いかと思います。
ref:https://kazuhira-r.hatenablog.com/entry/2020/10/23/003913

設定が反映されているか確認

terminal
bash-4.4# jps -v

----
Picked up JAVA_TOOL_OPTIONS: -XX:PermSize=129M
OpenJDK 64-Bit Server VM warning: ignoring option PermSize=129M; support was removed in 8.0
1 jar -XX:PermSize=129M
78 Jps -XX:PermSize=129M -Dapplication.home=/usr/java/openjdk-8 -Xms8m

Podに入り、設定が反映されているかを確認してみると、JVMパラメータ-XX:PermSize129Mに設定されていることが確認されています。

まとめ

今回は、Kubernetesマニフェストで管理する方法を実現しました。Kubernetesのマニフェストの設定で変数JAVA_TOOL_OPTIONSを活用することで柔軟にJVMのパラメータを変更することができると思います。

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3