Kubernetes组件通信
Kubernetes多组件之间的通信原理为:
- API Server负责etcd存储的所有操作,且只有API Server才直接操作etcd集群
- API Server对内(集群中的其他组件)和对外(用户)提供统一的REST API,其他组件均通过API Server进行通信
- Controller Manager、Scheduler、Kube-proxy和Kubelet等均通过API Server watch API监测资源变化情况,并对资源做相应的操作
- 所有需要更新资源状态的操作均通过API Server的REST API进行
- API Server也会直接调用Kubelet API(如logs、exec、attach等),默认不校验Kubelet证书,但可以通过--kubelet-certificate-authority开启(而GKE通过SSH隧道保护它们之间的通信)
创建Pod的流程为:
- 用户通过REST API创建一个Pod
- API Server将其写入etcd
- Scheduler检测到未绑定Node的Pod,开始调度并更新Pod的Node绑定
- Kubelet检测到有新的Pod调度过来,通过Container Runtime运行该Pod
- Kubelet通过Container Runtime取到Pod状态,并更新到API Server中