kube-apiserver:
Kubernetes API 服务器验证并配置 API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互。
kube-scheduler:
调度器通过 Kubernetes 的监测(Watch)机制来发现集群中新创建且尚未被调度到节点上的 Pod。调度器会将所发现的每一个未调度的 Pod 调度到一个合适的节点上来运行。调度器会依据下文的调度原则来做出调度选择。
kube-controller-manager:
Kubernetes 控制器管理器是一个守护进程,内嵌随 Kubernetes 一起发布的核心控制回路。在机器人和自动化的应用中,控制回路是一个永不休止的循环,用于调节系统状态。在 Kubernetes 中,每个控制器是一个控制回路,通过 API 服务器监视集群的共享状态, 并尝试进行更改以将当前状态转为期望状态。目前,Kubernetes 自带的控制器例子包括副本控制器、节点控制器、命名空间控制器和服务账号控制器等。
etcd:存储kube-apiserver处理过的持久化数据。
kubelet:
容器运行时(Container Runtime)是在节点上的守护进程, 被配置用来为 kubelet 提供 CRI 服务。kubelet负责与容器运行时(如Docker、containerd)交互。这种交互依赖于容器运行时接口(CRI,Container Runtime Interface)对容器创建、启动、停止等操作。
kubelet还通过gRPC协议同设备插件进行交互。设备插件允许一个节点发现新的 Node 设施(除了
cpu
和memory
等内置的节点资源之外), 并向请求资源的 Pod 提供了这些自定义的节点本地设施。容器存储接口(CSI,Container Storage Interface)提供了一种扩展 Kubernetes 的方式使其支持新类别的卷。这些卷可以由持久的外部存储提供支持,可以提供临时存储,还可以使用文件系统范型为信息提供只读接口。
容器网络接口(CNI,Container networking Interface)可以让 Kubernetes 使用不同的网络拓扑和技术。你的 Kubernetes 集群需要一个 网络插件 才能拥有一个正常工作的 Pod 网络, 才能支持 Kubernetes 网络模型的其他方面。
在 Kubernetes 1.24 之前,CNI 插件也可以由 kubelet 使用命令行参数
cni-bin-dir
和network-plugin
管理。Kubernetes 1.24 移除了这些命令行参数, CNI 的管理不再是 kubelet 的工作。
kube-proxy:
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。