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
この記事を書くにあたり下記の情報を参考にさせていただきました。