控制器是Kubernetes的“大脑”,负责确保集群的实际状态始终符合你定义的期望状态。这个自动化的“纠偏”过程,是其实现自愈和自动化管理的核心。
核心工作原理:调谐循环(Reconcile Loop)
控制器的逻辑是一个无休止的“调谐循环”,包含四个主要步骤:
- 监控 (Watch):通过API Server持续监控特定资源的状态。
- 对比 (Compare):对比资源的实际状态与期望状态(由YAML等声明式配置定义)。
- 执行 (Act):若不一致,执行操作(增、删、改Pod等)向期望状态靠拢。
- 重复 (Repeat):循环往复,持续维持集群的稳定性。
主要控制器种类
Kubernetes内置了许多控制器,由kube-controller-manager统一管理。按功能可以分为以下几类:
应用部署与管理
- Deployment Controller:最常用的控制器。管理无状态应用的声明式更新,支持滚动更新、回滚和水平扩缩容。
- ReplicaSet Controller:确保指定数量的Pod副本始终运行。通常不单独使用,而是作为Deployment的底层组件。
- StatefulSet Controller:为数据库等有状态应用提供稳定的网络标识和持久化存储,并保证Pod的顺序启停。
- DaemonSet Controller:确保集群中每个(或部分)节点上都运行一个Pod副本,常用于日志收集(如Fluentd)、监控(如Prometheus Node Exporter)等节点级守护进程。
- Job Controller:管理一次性或批处理任务,确保任务成功完成。
- CronJob Controller:按预定时间表(如每天凌晨3点)周期性触发Job,用于定时任务。
集群基础设施与策略
- Node Controller:监控节点健康状态,在节点故障时做出响应,如驱逐Pod。
- Namespace Controller:管理命名空间的生命周期,并在删除命名空间时清理其下的所有资源。
- ResourceQuota Controller:为命名空间设置资源配额(如CPU、内存、Pod总数),防止资源滥用。
- LimitRange Controller:为命名空间内的Pod或容器设置默认的资源请求和限制。
- ServiceAccount & Token Controllers:为命名空间创建默认的ServiceAccount,并管理API访问令牌。
网络、存储与服务
- Service Controller:与云服务商的负载均衡器交互,为
Type=LoadBalancer的Service创建外部负载均衡器。 - Endpoint Controller / EndpointSlice Controller:维护
Endpoints或EndpointSlice对象,动态记录Service后端可用的Pod IP和端口,是Service和Pod之间的桥梁。 - PersistentVolume (PV) Controller:管理PersistentVolume和PersistentVolumeClaim的生命周期,处理存储卷的绑定、回收等。
自动扩缩与维护
- Horizontal Pod Autoscaler (HPA):根据Pod的CPU、内存等指标自动调整Deployment或StatefulSet的副本数。
- Garbage Collector:负责清理集群中的“孤儿”资源。例如,删除Deployment时,其管理的ReplicaSet和Pod也会被级联删除。
相关知识点
- Controller Manager:Kubernetes控制平面的核心组件,它将所有控制器整合在单一进程中运行,负责管理它们的生命周期。
- 声明式 vs. 命令式:控制器是声明式管理的核心。你只需在YAML文件中声明期望的最终状态,控制器会自行决定如何实现。
- 自定义控制器 (Custom Controller):Kubernetes支持通过CustomResourceDefinition (CRD)扩展API,并编写自定义控制器来管理这些自定义资源,以满足业务特有需求。
- 调谐循环的实现:控制器通过List-Watch机制与API Server高效交互,既能获取资源当前状态(List),又能监听后续变更事件(Watch)。
总而言之,理解控制器及其背后的“调谐循环”机制,是掌握Kubernetes自动化运维理念的关键一步。