Kubernetes 控制管理器 (Controller Manager)
Kubernetes 控制管理器(Controller Manager)是 Kubernetes 集群中负责运行控制器(Controller)的核心组件之一。控制器是一个控制循环,负责集群状态的维护和管理。控制管理器通过不断地监控集群的当前状态,确保它与期望状态保持一致,负责自动化和协调多种集群资源的管理。
控制管理器的作用
控制管理器的主要作用是保证集群资源的期望状态与实际状态保持一致,并对集群资源进行自动化管理。控制管理器中的每个控制器都在后台不断地工作,监控并处理 Kubernetes 中的各种资源对象(如 Pod、ReplicaSet、Deployment 等)。
控制器的种类
Kubernetes 控制管理器通常会包含以下几类控制器,每个控制器都负责特定的资源对象:
-
Replication Controller / ReplicaSet Controller:
- ReplicaSet Controller 负责确保特定数量的 Pod 副本处于运行状态。如果某个 Pod 意外崩溃或被删除,ReplicaSet Controller 会自动创建新的 Pod 以替代它,从而保证期望的副本数。
-
Deployment Controller:
- Deployment Controller 负责管理 Deployment 资源,它使得应用的部署和滚动更新变得更简单。通过 Deployment,用户可以定义应用的期望状态,Controller 会确保始终保持该状态,同时支持滚动更新和回滚等功能。
-
StatefulSet Controller:
- StatefulSet Controller 负责管理 StatefulSet 资源,适用于需要有状态的应用(如数据库)。StatefulSet 提供有序部署、缩放和滚动更新功能,每个 Pod 都会有一个稳定的标识符,并且在重启后能够恢复之前的状态。
-
DaemonSet Controller:
- DaemonSet Controller 确保集群中每个节点上都运行一个 Pod 副本,适用于需要在每个节点上运行的应用(如日志收集器、监控代理等)。当集群新增节点时,DaemonSet 会在新节点上自动创建相应的 Pod。
-
Job Controller:
- Job Controller 负责创建和管理 Job 资源,确保指定数量的 Pod 完成指定的任务(通常是一次性任务)。Job Controller 会监控 Pod 的运行状态,直到任务完成。
-
CronJob Controller:
- CronJob Controller 负责管理 CronJob 资源,CronJob 允许用户定义定时任务,类似于 Unix 中的 cron。它会按照指定的时间间隔执行 Job。
-
Horizontal Pod Autoscaler (HPA) Controller:
- HPA Controller 负责根据负载自动扩展和缩减 Pod 的数量。它会根据 CPU 使用率或其他指标调整 Deployment、ReplicaSet 或 StatefulSet 的副本数量。
-
Endpoint Controller:
- Endpoint Controller 负责更新和维护 Service 的 Endpoints。当 Pod 发生变化时,Endpoint Controller 会及时更新相应的 Endpoints,确保流量能够正确地路由到可用的 Pod。
控制管理器的工作原理
控制管理器通过控制循环(Controller Loop)来运行每个控制器。控制循环是一种周期性检查的机制,控制器会不断地检查集群当前状态并与期望状态进行对比。如果当前状态与期望状态不一致,控制器会发起相应的操作来调整实际状态。
-
读取当前状态:
- 控制器首先从集群的 etcd 存储中读取当前状态(如 Pod 数量、节点状态等)。
-
与期望状态对比:
- 控制器根据其资源定义(如 Deployment、ReplicaSet)中的期望状态与当前状态进行对比。例如,若期望有 3 个 Pod 运行,但实际上只有 2 个 Pod,控制器会发现不一致。
-
采取行动:
- 根据对比结果,控制器会采取必要的行动,如创建、删除或修改资源对象,以使集群的实际状态与期望状态一致。
-
周期性重复:
- 控制器会持续地执行这一过程,确保集群状态始终符合预期。
控制管理器的部署与运行
Kubernetes 控制管理器通常是作为单个进程运行的,通常由 kube-controller-manager 进程提供。这个进程会启动并运行多个控制器,每个控制器都有不同的职责。
- Kube-controller-manager 作为 Kubernetes 的核心组件之一,通常在控制平面节点上运行。
- 控制管理器可以在 Kubernetes 集群中运行多个副本,确保高可用性。