Pod
概要
PodとはKubernetes上でのタスクの最小実行単位である.Podには1つ以上のコンテナがありそれらの間ではネットワーク (IPアドレス) とストレージが共有される.
一つの仕事を行うのに協調して動く複数のコンテナをまとめて扱う際に使用する.基本的にはPodの目的となる仕事をするコンテナ1つ (アプリケーションサーバやRDBなど) と,それを補助する0個以上のsidecar container (プロキシサーバーやファイルをpollingするスクリプト) を合わせてPodとする.
スケジューリング
PodはKubernetesのスケジューリングにおける最小単位である.Podに含まれるすべてのリソースは同じ Node にスケジュールされる.また,他に優先順位の高いPodがスケジュールされるとき,優先順位の低いPodが停止されることもある. Podの生存期間
Podとそれに内包されるものは一時的に存在するものである (ephemeralである).Pod内のコンテナの実行が終了したり,スケジュラーによってPodが削除された際に,Podに含まれるコンテナ・ネットワーク設定・Pod内部のストレージは消滅する.
故に,Podの定義を直接yamlで記述しクラスタに適用することはせず, Deployment や StatefulSet を用いて特定の仕様に沿った (templateに沿った) Podが常に指定した数だけ存在する状態を維持する.この際DeploymentやStatefulSetがユーザに代わって必要なPodを作成してくれる. Podは一時的なものだがいつでもスケジュラーによって停止・削除されうるため,Pod内には永続化すべき状態を持たないように心がける必要がある.
Podの例
code:yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
上記のyamlは myapp-pod という名前のPodを定義するものである.このPodにはコンテナが1つあり,このyamlをクラスタに適用すると,busybox イメージから作成したコンテナ内で command に書かれたコマンドの列が実行された後,Podが消滅する.
参考