Home

Controller Manager 详解:Kubernetes 集群的“自动化大脑”

Controller Manager(控制器管理器)是 Kubernetes 控制平面的核心组件之一,负责运行各种 控制器(Controller),确保集群的实际状态(Actual State)始终与用户声明的期望状态(Desired State)一致。它的核心作用是 监控集群状态并自动修复偏差,是 Kubernetes 实现声明式 API 和自愈能力的关键。


1. Controller Manager 的核心作用

功能说明
状态协调持续监控资源(如 Pod、Deployment、Service)的实际状态,确保其符合用户定义的期望状态(YAML 声明)。
故障恢复自动处理节点故障、Pod 崩溃、副本数不足等问题,保障应用高可用。
资源管理管理副本集(ReplicaSet)、端点(Endpoints)、命名空间(Namespace)等资源的生命周期。
扩展支持提供基础框架,允许开发者自定义控制器(Operator 模式)。

2. Controller Manager 的架构

Controller Manager 由 多个独立的控制器 组成,每个控制器专注于一类资源的管控:

+-----------------------+
|   Controller Manager  |
+-----------------------+
|  Deployment Controller| → 管理 Deployment 的副本数和滚动更新
|  ReplicaSet Controller| → 确保 ReplicaSet 的 Pod 副本数达标
|  StatefulSet Controller| → 管理有状态应用的 Pod 和存储
|  DaemonSet Controller | → 确保每个节点运行指定的 Pod(如日志收集器)
|  Job Controller       | → 管理一次性任务(Job/CronJob)
|  Endpoints Controller | → 维护 Service 的 Endpoints(后端 Pod IP:Port)
|  Namespace Controller | → 处理命名空间的创建/删除
|  Node Controller      | → 监控节点状态,处理节点不可用事件
|  ...                  |
+-----------------------+

:不同 Kubernetes 版本的控制器可能略有差异。


3. 核心控制器详解

(1)Deployment Controller

  • 作用:管理 Deployment 资源,确保其声明的 Pod 副本数和更新策略生效。
  • 典型场景
    • 当用户修改 Deploymentreplicas 时,控制器会自动创建或删除 Pod。
    • 当用户更新 Deployment 的镜像版本时,控制器会触发滚动更新(Rolling Update)。

(2)ReplicaSet Controller

  • 作用:确保 ReplicaSet 的当前 Pod 数量与 spec.replicas 一致。
  • 与 Deployment 的关系
    • Deployment 通过管理 ReplicaSet 间接控制 Pod。
    • 滚动更新时,Deployment 会创建新的 ReplicaSet,逐步替换旧的。

(3)StatefulSet Controller

  • 作用:管理有状态应用(如数据库),确保 Pod 的唯一性和持久化存储的绑定。
  • 特性
    • Pod 名称具有固定序号(如 mysql-0mysql-1)。
    • 持久化卷(PVC)会随 Pod 自动创建/绑定。

(4)DaemonSet Controller

  • 作用:确保所有(或部分)节点运行一个指定的 Pod(如日志收集组件 fluentd)。
  • 典型场景
apiVersion: apps/v1
kind: DaemonSet
spec:
  template:
    spec:
      containers:
      - name: fluentd
        image: fluentd:latest

(5)Endpoint Controller

  • 作用:监控 ServicePod 的变化,更新 Endpoints 对象(记录 Service 后端 Pod 的 IP
    )。
  • 关键流程
    1. 用户创建 Service 并指定 selector(如 app: nginx)。
    2. Endpoint Controller 发现匹配的 Pod,将其 IP 和端口写入 Endpoints
    3. kube-proxy 根据 Endpoints 更新 iptables/IPVS 规则。

(6)Node Controller

  • 作用:监控节点(Node)状态,处理节点故障。
  • 典型行为
    • 当节点失联(如宕机)时,标记节点为 NotReady
    • 若失联超过 --node-monitor-grace-period(默认 40s),开始驱逐该节点上的 Pod。

4. Controller Manager 的工作流程

Deployment 创建 Pod 为例:

  1. 用户提交 Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:latest
  1. API Server 接收请求并写入 etcd
  2. Deployment Controller 检测到新对象
    • 创建对应的 ReplicaSet
  3. ReplicaSet Controller 发现新对象
    • 检查当前 Pod 数量(0)与期望值(3)的差异。
    • 调用 API Server 创建 3 个 Pod。
  4. Scheduler 分配节点
    • 将未调度的 Pod 绑定到合适的节点。
  5. kubelet 创建 Pod
    • 在目标节点上启动容器。
  6. Controller Manager 持续监控
    • 如果某个 Pod 崩溃,ReplicaSet Controller 会重新创建它。

5. Controller Manager 的配置参数

Controller Manager 的启动参数(通常位于 /etc/kubernetes/manifests/kube-controller-manager.yaml):

参数作用示例
--cluster-name集群名称--cluster-name=my-cluster
--node-monitor-period节点状态检查间隔--node-monitor-period=5s
--node-monitor-grace-period节点失联后标记为不可用的等待时间--node-monitor-grace-period=40s
--pod-eviction-timeoutPod 驱逐超时时间--pod-eviction-timeout=5m
--controllers指定启用的控制器列表--controllers=*,bootstrapsigner,tokencleaner

6. 常见问题排查

(1)如何查看 Controller Manager 日志?

kubectl logs -n kube-system kube-controller-manager-<pod-id>

:如果是静态 Pod(如 kubeadm 部署),需直接查看节点上的日志:

journalctl -u kube-controller-manager -f

(2)控制器未生效的可能原因

  • API Server 通信失败:检查 Controller Manager 到 API Server 的网络连通性。
  • 权限不足:确保 Controller Manager 的 ServiceAccount 有足够 RBAC 权限。
  • 资源冲突:如 ReplicaSetselector 匹配了无关的 Pod。

(3)如何手动触发控制器协调?

删除资源后,控制器会自动重建:

kubectl delete pod nginx-xxxxx --force

7. 总结

关键点说明
角色Kubernetes 的“自动化大脑”,负责维护集群状态。
核心机制通过控制器循环(Reconciliation Loop)比较实际状态与期望状态。
核心控制器Deployment、ReplicaSet、StatefulSet、DaemonSet、Endpoint、Node 等。
高可用通常以多副本运行,通过 Leader 选举(—leader-elect=true)避免冲突。
扩展性可结合自定义控制器(Operator)实现复杂业务逻辑。

Controller Manager 是 Kubernetes 实现“自愈”能力的核心,它让用户只需声明“想要什么”,而无需关心“如何实现”。

Kubernetes 网络 存储 AI