Kubernetes JobでJavaのバッチ処理を動かす

目的

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

社内でバッチ処理をkubernetes(以下K8S)で動作したい要望があったため、Jobの実行方法について記載する。

前提

  • K8Sが構築済みであること
  • K8Sダッシュボードが使用可能であること
  • dockerがイントール済みであること
  • Amazon Elastic Container Registry(以下ECR)が使用可能であること

事前準備

コンソールに「Hello K8S Job!」と表示するだけのJavaバッチをdockerで作成する。

以下はdockerがイントール済みの端末で行う。

  1. Javaバッチを作成する。
    ソース格納用ディレクトリを作成する。

    格納ディレクトリにJavaバッチクラスを作成する。
    作成ファイル:src/Main.java

  2. dockerファイルを作成する。
    javaファイルをコンパイルして実行するDockerfileを作成する。
    作成ファイル:Dockerfile

  3. dockerファイルをビルドする。
    Dockerfileを作成した場所で以下コマンドを実行しdockerビルドを行う

  4. ECRにdockerイメージをプッシュする
    ※今回は利便上「ECR」を使用しているがK8Sから参照できるdockerリポジトリであれば 特に「ECR」である必要はない
    ECRログイン

    ※「xxxx」と「ap-northeast-1」各環境の設定に変更する
    「3.」でビルドしたdockerイメージにタグを付ける

    ※「xxxx」と「test-ecr」各環境の設定に変更する
    ECRにプッシュする

    ※「xxxx」と「test-ecr」各環境の設定に変更する
    ECRにプッシュされたことを確認

K8SのJobを作成する

以下の手順はkubectlコマンドが実行出来る端末で行う

  1. Job用のyamlファイルを作成する
    作成ファイル:job.yaml

  2. 重要そうなパラメータ

    parallelism:Jobの並列実行数
     1度しか動かないJobでは意味がないが、2回うごくJobの場合並列で実行される

    completions:Jobの成功回数
     Jobの成功回数を指定、例えば2を指定した場合2回実行される

    restartPolicy:Job失敗時の動作設定
     OnFailure : 失敗時のみコンテナを再起動
     Never : コンテナを再起動しない

  3. 上記で作成したyamlファイルを実行する

    実行結果を確認

    ※ポットが作成され、実行されていることを確認
     再実行時は一度Jobを削除する必要がある

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス