Kubernetes 多组件之间的通信原理:
- apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群
- apiserver 对内(集群中的其他组件)和对外(用户)提供统一的 REST API,其他组件均通过 apiserver 进行通信
- controller manager、scheduler、kube-proxy 和 kubelet 等均通过 apiserver watch API 监测资源变化情况,并对资源作相应的操作
- 所有需要更新资源状态的操作均通过 apiserver 的 REST API 进行
 
- apiserver 也会直接调用 kubelet API(如 logs, exec, attach 等),默认不校验 kubelet 证书,但可以通过 --kubelet-certificate-authority开启(而 GKE 通过 SSH 隧道保护它们之间的通信)
比如最典型的创建 Pod 的流程:

- 
通过 CLI 或者 UI提交 Pod 部署请求给 Kubernetes API Server
- 
API Server会把这个信息写入到它的存储系统 etcd
- 
Scheduler会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度- 调度决策
- 向 API Server report 说:“OK!这个 Pod 需要被调度到某一个节点上。”
 
- 
API Server接收到这次操作之后,会把这次的结果再次写到 etcd 中
- 
相应节点的 kubelet会watch到一个需要启动的Pod- kubelet调CRI配置容器的运行环境、调CNI配置网络、调CSI接口配置存储
- 上传状态信息给API Server
 
- 
API Server记录Pod部署状态到etcd
参考链接
https://www.qikqiak.com/k8s-book/docs/15.%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E4%B8%8E%E7%BB%84%E4%BB%B6.html https://www.wumingx.com/k8s/kubernetes-introduction.html
 
           
          
评论