- クラウド技術
Kubernetes JobでJavaのバッチ処理を動かす
- #Java
- #AWS
目的
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
社内でバッチ処理をkubernetes(以下K8S)で動作したい要望があったため、Jobの実行方法について記載する。
前提
- K8Sが構築済みであること
- K8Sダッシュボードが使用可能であること
- dockerがイントール済みであること
- Amazon Elastic Container Registry(以下ECR)が使用可能であること
事前準備
コンソールに「Hello K8S Job!」と表示するだけのJavaバッチをdockerで作成する。
以下はdockerがイントール済みの端末で行う。
- Javaバッチを作成する。
ソース格納用ディレクトリを作成する。
1<span>mkdir src</span>格納ディレクトリにJavaバッチクラスを作成する。
作成ファイル:src/Main.java
12345public class Main {public static void main(String[] args) {System.out.println("Hello K8S Job!");}} - dockerファイルを作成する。
javaファイルをコンパイルして実行するDockerfileを作成する。
作成ファイル:Dockerfile123456FROM openjdk:8-jdk-alpineCOPY src /srcRUN javac /src/Main.javaWORKDIR /srcCMD ["java","Main"] - dockerファイルをビルドする。
Dockerfileを作成した場所で以下コマンドを実行しdockerビルドを行う1<span>docker build -t java-batch .</span> - ECRにdockerイメージをプッシュする
※今回は利便上「ECR」を使用しているがK8Sから参照できるdockerリポジトリであれば 特に「ECR」である必要はない
ECRログイン
1<span>aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxx.dkr.ecr.ap-northeast-1.amazonaws.com</span>※「xxxx」と「ap-northeast-1」各環境の設定に変更する
「3.」でビルドしたdockerイメージにタグを付ける
1<span>docker tag java-batch:latest xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-ecr:java-batch</span>※「xxxx」と「test-ecr」各環境の設定に変更する
ECRにプッシュする
1<span>docker push xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-ecr:java-batch</span>
K8SのJobを作成する
以下の手順はkubectlコマンドが実行出来る端末で行う
- Job用のyamlファイルを作成する
作成ファイル:job.yaml
1234567891011121314151617181920apiVersion: batch/v1kind: Jobmetadata:name: java-batchspec:# parallelism# Jobの並列実行数parallelism: 1# completions# Jobの成功回数 (例:2を指定した場合2回実行される)completions: 1template:spec:containers:- name: java-batchimage: xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-ecr:java-batch# restartPolicy# OnFailure : 失敗時のみコンテナを再起動# Never : コンテナを再起動しないrestartPolicy: Never - 重要そうなパラメータ
・parallelism:Jobの並列実行数
1度しか動かないJobでは意味がないが、2回うごくJobの場合並列で実行される・completions:Jobの成功回数
Jobの成功回数を指定、例えば2を指定した場合2回実行される・restartPolicy:Job失敗時の動作設定
OnFailure : 失敗時のみコンテナを再起動
Never : コンテナを再起動しない - 上記で作成したyamlファイルを実行する
1<span>kubectl apply -f job.yaml</span>
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>