k8s 的组件主要分为两部分:控制面(control plane)组件和 worker node 组件:
The Control Plane | On the worker node | Add-on Component |
---|---|---|
• etcd • API Server • Scheduler • Controller Manager | • kubelet • kube-proxy • Container Runtime | • kube-dns • Dashboard • Ingress Controller • Heapster • CNI network plugin |
除了 kubelet 必须是一个普通的进程外,其他组件可以是普通进程,也可以是 以 pod 形式运行 的(事实上大多是以 pod 形式)。Master node 也往往有 kubelet 用来运行控制面的组件。
Worker node 上的组件是必须全部跑在 worker node,但是 master 的组件可以分布在不同的 node,也可以跑多个实例做高可用。其中 etcd 和 kube-api-server 是可以并行(parallel)运行的,但 scheduler 和 controller manager 同一时间只能各自有一个实例运行。
k8s 的组件只与 kube-api-server 通信。etcd 只被 kube-api-server 读写。