Kubernetes Cloud Provider — Yu Peng
Opened this issue · 3 comments
yu3peng commented
以下是没有引入云控制器管理器的 Kubernetes 集群架构:
在上面的图中,Kubernetes 和云提供商通过几个不同的组件集成:
-
Kubelet
-
Kubernetes 控制器管理器
-
Kubernetes API 服务器
CCM 将前面三个组件中所有依赖云服务的逻辑进行合并,形成单一的云服务集成点,引入 CCM 的新架构如下所示:
yu3peng commented
yu3peng commented
调度流程:
- 首先,客户端通过 API Server 的 REST API 或者 kubectl 工具创建 Pod 资源
- API Server 收到用户请求后,存储相关数据到 etcd 数据库中
- 调度器监听 API Server 查看未调度(bind)的 Pod 列表,循环遍历地为每个 Pod 尝试分配节点,这个分配过程分为两个阶段:
- 预选阶段(Predicates),过滤节点,调度器用一组规则过滤掉不符合要求的 Node 节点,比如 Pod 设置了资源的 request,那么可用资源比 Pod 需要的资源少的主机显然就会被过滤掉
- 优选阶段(Priorities),为节点的优先级打分,将上一阶段过滤出来的 Node 列表进行打分,调度器会考虑一些整体的优化策略,比如把 Deployment 控制的多个 Pod 副本分布到不同的主机上,使用最低负载的主机等等策略
- 经过上面的阶段过滤后选择打分最高的 Node 节点和 Pod 进行 binding 操作,然后将结果存储到 etcd 中
- 最后被选择出来的 Node 节点对应的 kubelet 去执行创建 Pod 的相关操作