は一つ以上のコンテナから構成される、Kubernetes におけるコンテナ実行に関する最小単位のリソースです。 アプリケーションをコンテナ化して動かしたい場合は最終的には Pod が作成されることになるはず。 IP アドレスは Pod 単位で割り当てられます => ネットワークの名前空間を共有 つまり、内部のコンテナで同じポート番号でサーバをリッスンしようとするとどちらかは失敗します
冗長性、スケールインやスケールアウトを実現するリソースの一つ • 後述する Deployment と合わせて Pod -> ReplicaSet -> Deployment という親子構造がある Pod Pod Pod Pod Pod ReplicaSet (Replica 数 = 5) 図引用: Kubernetes 完全ガイド 第一版
= 3) metadata.labels で該当する app: nginx ラベルがついた Pod を探 す Pod app: echo Pod app: test Pod app: nginx Pod app: nginx Pod app: nginx 図引用: Kubernetes 完全ガイド 第一版
います Pod Pod Pod Old ReplicaSet (Replicas = 3) New ReplicaSet (Replicas = 0) Pod Pod Pod Old ReplicaSet (Replicas = 3) New ReplicaSet (Replicas = 1) Pod Pod Pod Pod Old ReplicaSet (Replicas = 2) New ReplicaSet (Replicas = 2) Pod Pod Pod Old ReplicaSet (Replicas = 0) New ReplicaSet (Replicas = 3) Pod 図引用: Kubernetes 完全ガイド 第一版
Pod NIC Endpoint (LB VIP) Pod Pod Pod kube-proxy kube-proxy kube-proxy 図引用: Kubernetes 完全ガイド 第一版 Node Network Pod Network • 外部のロードバランサが払い出す IP やクラスタ内でのみ使用可能な IP などを提供するリソース • それぞれの外部のロードバランサを利用する場合、プロバイダごとに実装が異なります • Pod への通信は kube-proxy によってノードから Pod の仮想 NIC にルーティングされます
NIC Pod Pod Pod kube-proxy kube-proxy kube-proxy 図引用: Kubernetes 完全ガイド 第一版 Node Network Pod Network • クラスタ内でのみ有効な DNS を利用してサービス間の通信を実現できる • Pod, Service に対して固有のレコードがクラスタ上の DNS に追加される • Pod から透過的に、別サービスの Pod へリクエストを送信することができる To: service-b.default.svc.cluster.local
10.0.0.10:80 NIC Pod app: echo 10.0.1.20:80 NIC Pod Pod app: echo 10.0.2.30:80 ClusterIP Service (10.100.100.100:8080) kube-proxy 図引用: Kubernetes 完全ガイド 第一版
NIC Pod app: echo 10.0.1.20:80 NIC Pod Pod app: echo 10.0.2.30:80 NodePort Service (*:30010) • 全ての Node の特定の Port でリクエストを受け付けるサービスを作成する • Kubernetes 外部からも 30010 にアクセスするとバックエンドの Pod にリクエストが送信できる • 外部との疎通性を確立する手法の1つ • ポート番号は指定できるが、指定しない場合は Kubernetes が使用していないポート番号をあらかじめ指定したレンジ から割り振ります