k8sコンテナでコマンドを実行するマニフェストファイルの記述例を紹介します。
TL;DR
下記の流れでk8sコンテナでコマンドを実行するサンプルをいくつか試してみました。
- サンプル1:単純な引数ありコマンドを実行する(commandのみ)記述方法
- サンプル2:シェルで複数の引数ありコマンドを実行する(commandのみ)記述方法
- サンプル3:シェルで複数の引数ありコマンドを実行する(command + args)記述方法①
- サンプル4:シェルで複数の引数ありコマンドを実行する(command + args)記述方法②
- サンプル5:シェルで複数の引数ありコマンドを実行する(command + 環境変数)記述方法
- まとめ
サンプル1
単純な引数ありコマンドを実行する(commandのみ)記述方法
■ sample01.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample01
spec:
containers:
- name: busybox
image: busybox
command: ['echo' , 'The sample01 app is running!']
サンプルpodをデプロイ
$ kubectl apply -f sample01.yaml
pod/sample01 created
サンプルpodの実行確認
$ kubectl logs sample01
The sample01 app is running!
ちゃんと実行されてますね。
ただし、コンテナのメインプロセスが即終了するためコンテナが再起動を繰り返してしまいます。
$ kubectl get pods sample01 -w
NAME READY STATUS RESTARTS AGE
sample01 0/1 Completed 1 7s
sample01 0/1 CrashLoopBackOff 1 7s
sample01 0/1 Completed 2 21s
sample01 0/1 CrashLoopBackOff 2 34s
sample01 0/1 Completed 3 48s
sample01 0/1 CrashLoopBackOff 3 1m
サンプル2
シェルで複数の引数ありコマンドを実行する(commandのみ)記述方法
■ sample02.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample02
spec:
containers:
- name: busybox
image: busybox
command: ['sh', '-c', 'echo The sample02 app is running! && sleep 3600']
サンプルpodをデプロイ
$ kubectl apply -f sample02.yaml
pod/sample02 created
サンプルpodの実行確認
$ kubectl logs sample02
The sample02 app is running!
ちゃんと実行されてますね。
サンプル3
シェルで複数の引数ありコマンドを実行する(command + args)記述方法①
■ sample03.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample03
spec:
containers:
- name: busybox
image: busybox
command: ['sh']
args: ['-c', 'echo The sample03 app is running! && sleep 3600']
サンプルpodをデプロイ
$ kubectl apply -f sample03.yaml
pod/sample03 created
サンプルpodの実行確認
$ kubectl logs sample03
The sample03 app is running!
ちゃんと実行されてますね。
サンプル4
シェルで複数の引数ありコマンドを実行する(command + args)記述方法②
■ sample04.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample04
spec:
containers:
- name: busybox
image: busybox
command:
- 'sh'
args:
- '-c'
- 'echo The sample04 app is running! && sleep 3600'
サンプルpodをデプロイ
$ kubectl apply -f sample04.yaml
pod/sample04 created
サンプルpodの実行確認
$ kubectl logs sample04
The sample04 app is running!
ちゃんと実行されてますね。
サンプル5
シェルで複数の引数ありコマンドを実行する(command + 環境変数)記述方法
■ sample05.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample05
spec:
containers:
- name: busybox
image: busybox
env:
- name: MESSAGE
value: 'The sample05 app is running!'
command: ['sh', '-c', 'echo $(MESSAGE) && sleep 3600']
サンプルpodをデプロイ
$ kubectl apply -f sample05.yaml
pod/sample05 created
サンプルpodの実行確認
$ kubectl logs sample05
The sample05 app is running!
ちゃんと実行されてますね。
まとめ
同じような実行結果を出力する場合でも、いろいろな書き方があります。
全てを覚える必要はありませんが、書き方は一つじゃないということと、
変にハマらないために、まずは無難な書き方を覚えて徐々に慣れるのが良いと思います。
参考URL
この記事を書くにあたり下記の情報を参考にさせていただきました。