- クラウド技術
Kubernetes JobでJavaのバッチ処理を動かす
- #Java
- #AWS

目的
社内でバッチ処理をkubernetes(以下K8S)で動作したい要望があったため、Jobの実行方法について記載する。
前提
- K8Sが構築済みであること
- K8Sダッシュボードが使用可能であること
- dockerがイントール済みであること
- Amazon Elastic Container Registry(以下ECR)が使用可能であること
事前準備
コンソールに「Hello K8S Job!」と表示するだけのJavaバッチをdockerで作成する。
以下はdockerがイントール済みの端末で行う。
- Javaバッチを作成する。
ソース格納用ディレクトリを作成する。
mkdir src
格納ディレクトリにJavaバッチクラスを作成する。
作成ファイル:src/Main.java
public class Main { public static void main(String[] args) { System.out.println("Hello K8S Job!"); } }
- dockerファイルを作成する。
javaファイルをコンパイルして実行するDockerfileを作成する。
作成ファイル:DockerfileFROM openjdk:8-jdk-alpine COPY src /src RUN javac /src/Main.java WORKDIR /src CMD ["java","Main"]
- dockerファイルをビルドする。
Dockerfileを作成した場所で以下コマンドを実行しdockerビルドを行うdocker build -t java-batch .
- ECRにdockerイメージをプッシュする
※今回は利便上「ECR」を使用しているがK8Sから参照できるdockerリポジトリであれば 特に「ECR」である必要はない
ECRログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxx.dkr.ecr.ap-northeast-1.amazonaws.com
※「xxxx」と「ap-northeast-1」各環境の設定に変更する
「3.」でビルドしたdockerイメージにタグを付ける
docker tag java-batch:latest xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-ecr:java-batch
※「xxxx」と「test-ecr」各環境の設定に変更する
ECRにプッシュする
docker push xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-ecr:java-batch
K8SのJobを作成する
以下の手順はkubectlコマンドが実行出来る端末で行う
- Job用のyamlファイルを作成する
作成ファイル:job.yaml
apiVersion: batch/v1 kind: Job metadata: name: java-batch spec: # parallelism # Jobの並列実行数 parallelism: 1 # completions # Jobの成功回数 (例:2を指定した場合2回実行される) completions: 1 template: spec: containers: - name: java-batch image: 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ファイルを実行する
kubectl apply -f job.yaml