コンテナにコマンドと引数を定義する
このページでは、Podでコンテナを実行するときにコマンドと引数を定義する方法を説明します。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください:kubectl version
.
Podの作成時にコマンドと引数を定義する
Podを作成するときに、Pod内で実行するコンテナのコマンドと引数を定義できます。コマンドを定義するには、設定ファイルにcommand
フィールドを記述します。コマンドの引数を定義するには、設定ファイルにargs
フィールドを記述します。定義したコマンドと引数はPodの作成後に変更することはできません。
設定ファイルで定義したコマンドと引数は、コンテナイメージが提供するデフォルトのコマンドと引数を上書きします。引数を定義し、コマンドを定義しなかった場合、デフォルトのコマンドと新しい引数が使用されます。
command
フィールドは、いくつかのコンテナランタイムではエントリポイントに相当します。
この演習では、1つのコンテナを実行するPodを作成します。Podの設定ファイルには、コマンドと2つの引数を定義します。
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
-
YAMLの設定ファイルに基づいてPodを作成
kubectl apply -f https://k8s.io/examples/pods/commands.yaml
-
実行中のPodをリストアップ
kubectl get pods
出力は、command-demo Podで実行されたコンテナが完了したことを示します。
-
コンテナ内で実行されたコマンドの出力を確認するためにPodのログを見る
kubectl logs command-demo
出力は、HOSTNAMEとKUBERNETES_PORT環境変数の値を示します。
command-demo tcp://10.3.240.1:443
環境変数を使って引数を定義する
前述の例では、文字列を指定して引数を直接定義しました。文字列を直接指定する代わりに、環境変数を使用して引数を定義することもできます。
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
つまり、ConfigMapやSecretなど、環境変数を定義するために利用可能な技術のどれを使っても、Podの引数を定義できるということです。
"$(VAR)"
という括弧で囲まれて表示されます。これは、command
やargs
フィールドで変数を展開するために必要です。
シェルでコマンドを実行する
シェルでコマンドを実行する必要がある場合もあります。例えば、コマンドが複数のコマンドをパイプでつないだものであったり、シェルスクリプトであったりします。コマンドをシェルで実行するには、次のように記述します。
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
次の項目
- Podとコンテナの設定についてもっとよく知る
- コンテナ内でのコマンド実行についてもっとよく知る
- コンテナのAPIを確認する