Control plane
- kube-apiserver
- Kubernetes APIを提供しているコンポーネント
- etcd
- クラスタの情報を保存するために使用されるキーバリューストア
- kube-scheduler
- PodをどのNodeに割り当てるか決定するコンポーネント
- 1クラスタ内に複数のスケジューラを動作させることができる
- コントローラ
- クラスタの状態をAPIから監視し、現在の状態を目的の状態(desired state)に近づけるための操作を行うコンポーネント
- 制御ループ(control loop): システムの状態を制御する無限ループ
- API経由でリソースを操作する場合と、コントローラが直接リソースを管理する場合がある。
- kube-controller-manager: 複数のコントローラをまとめたビルドインのコントローラ
- cloud-controller-manager
- クラスタが外部のクラウドAPIを使用するときに経由するコンポーネント
Node
- kubelet
- クラスタ内の各ノードで動作するdaemon
- PodSpecを受け取り、それに記述されている通りにコンテナを動作させる。
- kube-proxy
- Node間・Pod間の通信を制御するネットワークプロキシ
- OSのパケットフィルタリングが利用可能な場合はそれを利用し、利用できない場合は自身でトラフィックを転送する
- コンテナランタイム
(kindでの確認メモ)
- 1control-plane, 3worker, kindest/node:v1.23.0の構成
- Control plane
- kindではそれぞれcontrol-plane NodeにPodとしてデプロイされている
- それぞれ
.metadata.ownerReferences
にはcontrol-plane Nodeが設定されている
kube-apiserver-${cluster}-control-plane
etcd-${cluster}-control-plane
kube-scheduler-${cluster}-control-plane
kube-controller-manager-${cluster}-control-plane
- cloud-controller-managerはなし
- Node
- kubelet: systemdのserviceとしてdaemonとして動作
- kube-proxy: DaemonSetとしてデプロイされている
- コンテナランタイム: containerdが動作
参考