がじぇ

お金と家電とプログラミングのブログ

Podとは何か?

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。


Kubernetesの基本コンポーネントであるPodについてまとめます。



f:id:gadgeterkun:20190706230722p:plain


TL;DR(要約)

  • Podとはコンテナの集合体であり、k8sの管理する最小単位

Podとは何か?

Podとは、

  • k8sによりデプロイ/管理される最小単位であり、
  • 一つ、または複数のコンテナが論理的なグループとなっているもの

コンテナを入れる入れ物とイメージするとわかりやすい。



Kubernetesが単一のコンテナではなく、Podを最小の単位として使用するのはなぜか?
Kubernetesがコンテナを管理するためにはそれに伴う追加の情報が必要であるため(後にやるcAdvisorやkubelet,kube-apiseverからのリクエストを受け取るにはPodである必要がある)

KubernetesがPod内に一つ以上のコンテナを許可するのはなぜか?

→密結合されるアプリケーションのコンテナを1つの単位として管理するため
複数のコンテナでデータを共有する場合は同じPodに入れる
同じPodにいるコンテナは当然同じノードにDeployされる


同一Podに複数のコンテナを入れるデプロイパターン例



f:id:gadgeterkun:20190706232415p:plain
>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)

Kubernetes完全ガイド (impress top gear)



Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com