Kubernetes CronJobで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のCronJobを作成する

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

【1】CronJob用のyamlファイルを作成する

作成ファイル:cron-job.yaml

 

 

【2】重要そうなパラメータ

schedule:Jobの実行スケジュール
 時刻はジョブが開始されたkube-controller-managerのタイムゾーンとなり、
 スケジュールの設定は以下となります。

※(wiki参照:https://ja.wikipedia.org/wiki/Crontab)
 ┌───────────── minute (0 – 59)
 │ ┌───────────── hour (0 – 23)
 │ │ ┌───────────── day of the month (1 – 31)
 │ │ │ ┌───────────── month (1 – 12)
 │ │ │ │ ┌───────────── day of the week (0 – 6) (Sunday to Saturday;
 │ │ │ │ │ 7 is also Sunday on some systems)
 │ │ │ │ │
 │ │ │ │ │
 * * * * *

concurrencyPolicy:Jobの同時実行の設定
 Allow : 同時実行を許可
 Forbid : 同時実行を拒否、実行中Jobが存在する場合は新規Jobはスキップ
 Replace : 同時実行を拒否、実行中Jobが存在する場合は実行中Jobをキャンセルし新規Jobを実行

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

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

設定した時刻に実行結果を確認します

※ポットが作成され、実行されていることを確認

ぜひ参考にしてみてください!

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

Smallitのサービス