Podとは何か?
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
Kubernetesの基本コンポーネントであるPodについてまとめます。
TL;DR(要約)
- Podとはコンテナの集合体であり、k8sの管理する最小単位
Podとは何か?
Podとは、
- k8sによりデプロイ/管理される最小単位であり、
- 一つ、または複数のコンテナが論理的なグループとなっているもの
コンテナを入れる入れ物とイメージするとわかりやすい。
Kubernetesが単一のコンテナではなく、Podを最小の単位として使用するのはなぜか?
→Kubernetesがコンテナを管理するためにはそれに伴う追加の情報が必要であるため(後にやるcAdvisorやkubelet,kube-apiseverからのリクエストを受け取るにはPodである必要がある)
KubernetesがPod内に一つ以上のコンテナを許可するのはなぜか?
→密結合されるアプリケーションのコンテナを1つの単位として管理するため
複数のコンテナでデータを共有する場合は同じPodに入れる
同じPodにいるコンテナは当然同じノードにDeployされる
同一Podに複数のコンテナを入れるデプロイパターン例
>https://www.usenix.org/system/files/conference/hotcloud16/hotcloud16_burns.pdf
Sidecar
ログを収集する機能を持ったコンテナなど、メインコンテナと組み合わせてデプロイするパターン。メインコンテナと独立してデプロイすることにより、ログ収集コンテナが失敗した場合でもサービスを継続できる。
Ambassador
例えばメインコンテナから複数のDB(Memcash,Redis等)と連携する場合、接続先をProxyする役割を持たすために同一Podに配置するパターン。
DBとの接続を別のコンテナに切り出すことにより、アプリケーションからはlocalhost上の単一の向き先だけ考えれば良いため、構成がシンプルになる。
Adapter conteiner
メトリックを収集、集計、表示するための監視ツールを同一Podにデプロイする場合がこのパターン。外部のモニタリングツールのインターフェースとなるコンテナを同一のPodに入れる。
マニフェストの例
例えば以下のようなPodの構成を定義したマニフィストをDeployするとPodが立ち上がる
kubectl create -f test_pod.yaml pod "test_pod" created
test_pod.yaml
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。