この記事は Kubernetes道場 Advent Calendar 2018 4日目の記事です。
今回はPodの containers
フィールドで指定されるContainer Objectについて簡単に解説する。
Container Objectのフィールドについて
Container Objectについては重要なフィールドがいくつかある。
- envFrom
- lifecycle
- livenessProve
- readinessProve
- resources
- securityContext
- volumeMounts
これらのフィールドについては結構重要なものなので後日別の記事で解説しようと思う。 なのでそれ以外のよく用いるフィールドを解説しようと思う。
command
Entrypointの配列を指定。要はコンテナで起動させたいプロセスを指定する。
このフィールドを省略すると、Dockerイメージの ENTRYPOINT
が使用される。
また、 $VAR_NAME
のような変数の参照はコンテナの環境変数を使い展開される。
このフィールドは更新不可である。
e.g.
|
|
args
引数の配列を指定。
このフィールドを省略すると、Dockerイメージの CMD
が使用される。
また、commandフィールドと同様に変数の参照はコンテナの環境変数を使い展開される。
このフィールドは更新不可である。
e.g.
|
|
env
コンテナ内の環境変数を指定する。
このフィールドは更新不可である。
e.g.
|
|
image
コンテナイメージ名を指定する。
e.g.
|
|
imagePullPolicy
コンテナイメージをPullするポリシーを指定する。以下の3つから選択する。
- Always: 常にコンテナイメージをPullする
- IfNotPresent: 既にコンテナイメージがあればPullを実行しない
- Never: Pullを実行しない。ローカルにコンテナイメージがあることを期待する
また、このパラメータを省略した際には image
の値を元に挙動が変わる。
- コンテナイメージのタグが
latest
だった場合、Always
が適用される - コンテナイメージのタグが
latest
ではないが指定されている場合、IfNotPresent
が適用される
e.g.
|
|
このフィールドは更新不可である。
name
コンテナ名を指定する。フォーマットは DNS_LABEL に従っていること。
|
|
要は、アルファベットで始まり、アルファベットか数字かハイフンが続き、アルファベットか数字で終わる文字列。
また、 Pod内でそれぞれのコンテナはユニークである必要がある。
このフィールドは更新不可である。
e.g.
|
|
ports
コンテナからexposeするポートを指定。
このフィールドは更新不可である。
containerPort
: PodのIPからExposeするポート番号を指定name
: Named Portとして利用する際の名前を指定。Pod内でユニークである必要があるprotocol
: ポートのプロトコルを指定。TCP
/UDP
/SCTP
から指定する。デフォルトはTCP
その他のフィールドについては以下を参照。
ContainerPort v1 core - Kubernetes API Reference Docs v1.12
e.g.
|
|
workingDir
コンテナのワーキングディレクトリを指定する。
省略された場合、Container Runtimeのデフォルトが使用される。コンテナイメージで指定されている際、それが使用される可能性がある。
e.g.
|
|
使用例と確認
前回nginxイメージを指定したPodを作成したが、このPodについて今回説明したフィールドを明示的に指定してみる。
ちょっと訳有で、コンテナイメージは nginx:alpine
を使用する。
|
|
基本的には上での解説どおりだが、 command
と args
、 env
、 workingDir
の確認をしておこう。
上のyamlをnginx.yamlというファイルで保存し、Podを作成する。
|
|
kubectl exec
コマンドで指定のPodの中のコンテナ内にプロセスを起動させることが出来る。このコマンドを使って起動しているプロセスを確認してみよう。
(この時psコマンドを使うのだが、 nginx
イメージには入っていないため nginx:alpine
イメージを使うようにした)
|
|
この様にPIDが1でnginxプロセスが nginx -g daemon off
で実行されていることが分かる。
次に環境変数を見てみよう。
|
|
HOGEHOGE=fugafuga
がありますね、ちゃんと反映されている。
さて、最後にワーキングディレクトリを確認しておこう。プロセスのワーキングディレクトリの確認は /proc/[PID]/cwd
のシンボリック先を確認することで可能だ。
PIDは1なので /proc/1/cwd
のリンク先を確認する。
|
|
指定した通り、 /tmp
になっている。
というわけで今回はここまで。
次回はPodで使用することが出来るVolumeについて見ていこう。
それでは。