Pod の command に指定するスクリプトを ConfigMap で差し込む
Posted on
Pod template の command
には実行したいコマンドをリストで渡せます。
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ['sh', '-c', 'echo "Hello, Kubernetes!"']
restartPolicy: OnFailure
上のような単純なコマンドなら問題ないのですが、少し複雑なことをしようとするとスクリプトでラップしたくなります(たとえば、引数をコマンド置換で渡したいケース)。
image
で指定するコンテナイメージにラッパースクリプトを含めてしまうのが王道だと思いますが、このためだけに Dockerfile を書いたりコンテナイメージを管理するのは面倒です。
そんなときは ConfigMap にラッパースクリプトを定義して、その ConfigMap を Volume としてマウントしてしまうのが楽です。
apiVersion: v1
kind: ConfigMap
metadata:
name: scripts
data:
hello.sh: |
#!/bin/sh
echo "Hello, Kubernetes!"
---
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["/bin/sh", "/tmp/hello.sh"]
volumeMounts:
- name: config-volume
mountPath: /tmp
volumes:
- name: config-volume
configMap:
name: scripts
items:
- key: hello.sh
path: hello.sh
restartPolicy: OnFailure
知っている人にとっては当たり前の Tips かもしれませんが、チームメイトに教えてもらって「なるほどー」と思ったので忘れないようにメモしておきます。