このエントリーは GMOアドマーケティングAdvent Calendar 2022 の16日目です。
こんにちは@zakisanbaimanです。
今回はCronJob(or Job)の中身を修正&実行したい場合の方法を記載します。
修正したイメージをビルドし直してJobとして実行するのが一般的かもしれませんが、それだとビルドに時間がかかったりソースの微修正がしづらいと思うので、自分がよく行っている修正手順を共有します。
環境
GKE Version: 1.21.14-gke.8500
手順
1. 修正したいCronJobのimageを取得
-o wide
を付けることでIMAGES項目が出現します。
$ kubectl get cj -o wide
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE CONTAINERS IMAGES SELECTOR
cronjobs-daily 0 16 * * * False 0 <none> 21m cronjobs-daily asia.gcr.io/hoge/hoge:hoge <none>
2. テンポラリのPodを作成
Podとして起動させることで常駐するため、ログインして微修正することが容易になります。
case A. コンテナ実行環境(環境変数やマウントなど)の設定が不要な場合
kubectl run
コマンドでPodを作成
$ kubectl run temp01 \
--image=asia.gcr.io/hoge/hoge:hoge \
--restart=Never
--restart=Never
と指定することによってPodとして起動することができます。
case B. コンテナ実行環境を対象CronJobと同様にしたい場合
Podのマニフェストファイルを作成して kubectl create -f <マニフェストファイル名>
を実行。
ここが面倒ですが、環境変数を一致させるにはこの方法が良さそうです。
apiVersion: v1
kind: Pod
metadata:
name: temp01
spec:
containers:
- name: temp01
image: asia.gcr.io/hoge/hoge:hoge
env:
- name: ENV
value: "hoge"
3. Pod内のコンテナにログイン
$ kubectl exec -it temp01 -- bash
※上記はPod内にコンテナが1つのみのケースですが、Pod内にコンテナが複数存在する場合は --container <コンテナ名>
でコンテナを指定する必要があります。
4. 修正&手動実行
実行したいソースが入っているため、修正するなりして何度も直接実行することができます。
5. Pod削除
不要になったPodは削除しておきましょう。
$ kubectl delete pods temp01
pod "temp01" deleted
まとめ
CronJob以前にcrontabを使っていたような方であれば、今回のようにコンテナログインして操作するのが一番馴染みがあるのではないでしょうか。
毎回修正イメージをビルドして実行させても良いのですが、今回の方法のほうが素早くトライアンドエラーができて便利だと思っています。
参考
Kubernetesドキュメント kubectlチートシート
プログラマーの雑記 kubernetesのcronjobをすぐ実行する方法
おわりに
明日は、@y-gさんによる「Googleアナリティクス4(GA4)を使ってみて」です。
引き続き、GMOアドマーケティングAdvent Calendar 2022 をお楽しみください!