yu3peng/blog-comments

Kubernetes Cloud Provider — Yu Peng

Opened this issue · 3 comments

Kubernetes 云控制器管理器

以下是没有引入云控制器管理器的 Kubernetes 集群架构:

在上面的图中,Kubernetes 和云提供商通过几个不同的组件集成:

  • Kubelet

  • Kubernetes 控制器管理器

  • Kubernetes API 服务器

CCM 将前面三个组件中所有依赖云服务的逻辑进行合并,形成单一的云服务集成点,引入 CCM 的新架构如下所示:

Kubernetes总架构图

调度流程:

  • 首先,客户端通过 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 的相关操作