当有新的 Pod 创建请求到达 Kubernetes 集群时,首先会被发送到 API Server。API Server 会将这些请求转发给控制器管理器进行处理。控制器管理器将根据请求中的信息(例如 PodSpec 和控制器类型)创建相应的控制器对象。
控制器对象包含有关所创建 Pod 的信息(例如 Pod 名称、所属命名空间、PodSpec 等),并负责管理 Pod 的整个生命周期。在创建控制器对象时,控制器管理器还会在 etcd 中创建相应的数据结构,以便跟踪 Pod 的状态和控制器的行为。
一旦控制器对象被创建,它会周期性地检查 Pod 的期望状态和实际状态之间的差异,并采取相应的措施以确保它们保持一致。例如,如果有一个 ReplicaSet 控制器,它的期望状态是有三个副本的 Pod 在运行,但实际上只有两个副本在运行,那么该控制器将会通过 API Server 向 kubelet 发送创建一个新的 Pod 的请求,以使 Pod 的实际状态符合期望状态。
一旦 kubelet 接收到创建 Pod 的请求,它将根据控制器对象中指定的 PodSpec 创建 Pod,并在节点上启动容器。一旦容器成功启动,kubelet 将会向 API Server 报告 Pod 的状态,以使控制器对象的期望状态和实际状态保持一致。
因此,Controller Manager 与 kubelet 是通过 API Server 进行协作的,Controller Manager 负责创建并管理控制器对象,kubelet 则负责根据控制器对象创建并管理 Pod。它们之间通过 API Server 进行交互以确保集群中的 Pod 状态符合用户的预期。