控制平面组件

控制平面的组件对集群做出全局决策(例如,调度),并且检测和响应集群事件(例如,当一个 Deployment 本数量不满足要求时启动一个新的 Pod)。控制平面组件可以在集群中的任何机器上运行。然而,为了简单起见,安装脚本通常会在同一台 机器上启动所有控制平面组件,并且不在这台机器上运行用户容器。

kube-apiserver(Kubernetes API 服务器)

API 服务器是 Kubernetes 控制平面的一个组件,用于暴露 Kubernetes API。它是 Kubernetes 控制平面的前端。 Kubernetes API 服务器的主要实现是 kube-apiserver。

etcd

etcd 作为 Kubernetes 所有集群数据的后端存储,是一个一致的、高可用的键值存储系统,是 Kubernetes 所有集群数据的后台数据库。

kube-scheduler(调度器)

负责调度,根据一系列因素(如资源请求、亲和性/反亲和性规则、数据位置等)决定 Pod 应该在哪个节点上运行。

kube-controller-manager(控制器管理器)

运行着各种控制器的守护进程,是集群的自动化引擎

  • 功能

    • 每个控制器都是一个独立的控制循环,通过 apiserver 监听集群状态,并努力将当前状态驱近于期望状态。

    • 核心控制器包括

      • 节点控制器:负责在节点出现故障时进行通知和响应。

      • 副本控制器:确保 Pod 的副本数量始终与期望值一致(例如,Deployment 依赖的控制器)。

      • 端点控制器:填充 Endpoints 对象(将 Service 链接到 Pod)。

      • 服务账户和令牌控制器:为新的命名空间创建默认账户和 API 访问令牌。

cloud-controller-manager(云控制器管理器)

云控制器管理器允许你将集群与云提供商的 API 连接起来,并将与云平台交互的组件与仅与集群交互的组件区分开来。

  • 功能

    • 将特定于云平台的控制逻辑从 kube-controller-manager 中分离出来,让核心的 Kubernetes 更具可移植性。

    • 包含节点控制器、路由控制器、服务控制器等,用于与云厂商的 API 交互,管理负载均衡器、存储卷、网络路由等。

工作节点组件

这些组件在每个工作节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet(Kubernetes 代理)

kubelet 是运行在集群中每个节点上的代理程序。它确保容器在 Pod 中正常运行。

kubelet 获取通过各种机制提供的一组 Pod 规范(PodSpecs),并确保这些 Pod 规范中描述的容器正在运行且处于健康状态。但kubelet 不管理非由 Kubernetes 创建的容器。

kube-proxy(可选组件)

集群的网络代理和负载均衡器

  • 功能

    • 在节点上维护网络规则,这些规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

    • 实现了 Kubernetes Service 的概念(如 ClusterIP, NodePort)。

    • 默认使用 iptablesIPVS 模式,将发往 Service VIP 的流量转发到后端正确的 Pod 上。

容器运行时(CRI)
  • 负责真正运行容器的软件。

  • 功能

    • Kubernetes 通过 容器运行时接口 与容器运行时交互。

    • 负责拉取镜像、启动和停止容器、管理容器存储和网络等底层操作。

    • 常见运行时containerd(目前最主流)、CRI-ODocker Engine(已废弃)。

更多推荐