「Kubernetes完全ガイド」 を元に、Kubernetesのコンポーネントのアーキテクチャをまとめます。
Kubernetesクラスタは下記の7つのコンポーネントから構成される、kube-apiserverを中心とした分散システム。
- etcd
- kube-apiserver
- kube-scheduler
- kube-controller-manager
- kubelet(+コンテナランタイム)
- kube-proxy(+Network Plugin)
- kube-dns(CoreDNS)
出典:(https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear-%E9%9D%92%E5%B1%B1/dp/4295004804)
etcd
OSSの分散KVS(Key-Value-Store)で、Kubernetesクラスタの登録情報格納領域。
奇数台(3/5/7)でクラスタを組む事が推奨。
kube-apiserver
Kubernetes APIを提供するコンポーネント。
kubectlはkube-apiserverにリクエストを送信する事で、DeploymentやService等の作成、削除を実施
例)kubectlでPodの登録時、kube-apiserverはPod情報をetcdに書き込むが、起動ノードが決まっていない為、ノード未割当となる。
kube-schedulerは、このノード情報をkube-apiserverにリクエストを送って書き換えてスケジューリング。
kubeletが続いてノード上でPodを起動
kube-scheduler
起動するノードが未割当のPodについて、ノードの状態やAffinity等を考慮して、起動ノードを決定
kube-controller-manager
様々なコントローラを実行するコンポーネント。例)DeploymentやReplicaSetの状態を監視しながら、必要なPod/レプリカを作成
kubelet
各Kubernetesノード上で動作するコンポーネント。Docker等のコンテナランタイムと連携し、コンテナの起動・停止を実施。
kube-proxy
各Kubernetesノード上で動作するコンポーネント。Service作成時に、ClusterIPやノードポート宛のトラフィックのPodへの転送方式を決定。
- userspace : (カーネルでなく)ユーザースペースで処理
- iptables: カーネル上のiptablesで処理する為、高速・安定処理
- ipvs: 大規模環境用
別途、FlannelやOpen vSwitch等、オーバレイネットワークを構築するソフトウェアとの連携が必要
kube-dns(後継:CoreDNS)
Kubernetesクラスタ内のDNSサーバ。
Service作成時やServiceに紐づくPodに変更があった際に、DNSエントリを連携して書き換える。