控制平面组件:kube-controller-manager 介绍

📝 前言

在 Kubernetes 控制平面组件中,kube-controller-manager 是负责维持集群状态的“大总管”。

如果说 kube-apiserver 是大脑、etcd 是记忆、kube-scheduler 是调度员,那么kube-controller-manager就是执行各种集群自动化控制逻辑的执行者,确保集群的实际状态与期望状态一致。

本文是《云原生之旅》系列第三部分的第五篇,将详细介绍 kube-controller-manager 的作用、工作原理、工作流程以及常用参数,帮助你更好地理解和优化它在生产环境的表现。

PS:这也是控制平面组件介绍的最后一篇了,下一篇将进入节点组件介绍部分。

🧠 本章知识卡片

🚀 本章小节

1️⃣ 什么是 kube-controller-manager?

kube-controller-manager 是 Kubernetes 控制平面的核心组件之一,它运行一组控制器(Controller),这些控制器通过 kube-apiserver 监听资源对象的变化,并执行相应的调节操作。

2️⃣ 工作职责

它主要负责:

  • 副本控制(Replication):确保 Pod 副本数与期望值一致(Deployment、ReplicaSet、StatefulSet)。
  • 节点管理(Node Controller):监控节点健康状态,自动隔离或清理失效节点。
  • 服务账户与 Token 控制器:自动为新创建的命名空间分配服务账户和 API 访问凭证。
  • 端点控制(Endpoints Controller):维护 Service 与 Pod 的映射关系。
  • Job 与 CronJob 控制:管理一次性任务与定时任务的执行。
  • 卷控制(Volume Controller):负责动态存储卷的创建与绑定。
  • 证书与 CSR(CertificateSigningRequest)控制:自动化签发和更新证书。

3️⃣ 工作原理

大致原理如下:

  • 监听集群状态

    所有控制器通过 kube-apiserver 监听集群对象的变更(例如 Pod、Node、Service 等)。

  • 比较期望状态与实际状态

    控制器会从 API Server 获取对象的期望状态(Spec)和实际状态(Status)。

  • 执行调整操作

    如果发现差异,则执行补偿动作(例如创建新 Pod、删除异常 Node、更新 Service Endpoints)。

  • 持续循环

    控制器是一个不断运行的循环过程,确保状态持续收敛到期望状态。

大致工作流程图如下:

4️⃣ 常见启动参数

kubeadm 安装的集群中,kube-controller-manager 的静态 Pod 配置文件通常位于:

1
/etc/kubernetes/manifests/kube-controller-manager.yaml

该文件中可以直接修改启动参数,修改后 kubelet 会自动重启该组件。

常见的启动参数如下:

参数 说明
--controllers 指定运行的控制器,支持 * 表示全部运行
--cluster-cidr 指定集群 Pod IP 段,用于管理 Node 上的 Pod CIDR 分配
--node-monitor-period Node 健康检查周期
--node-monitor-grace-period Node 未响应的宽限期,超过后认为不可用
--node-startup-grace-period 新 Node 加入时的宽限期
--service-cluster-ip-range Service 集群 IP 段
--allocate-node-cidrs 是否自动为 Node 分配 CIDR
--leader-elect 是否启用领导者选举
--feature-gates 启用/禁用实验特性,如 RotateKubeletServerCertificate=true
--kubeconfig 访问 API Server 的配置文件路径
--bind-address 监听地址
--secure-port HTTPS 服务端口

✅ 总结

kube-controller-manager 是 Kubernetes 控制平面中不可或缺的“自动化执行者”,通过运行多种控制器确保集群状态与期望状态一致。

在生产环境中,合理调整 --node-monitor-period--node-monitor-grace-period 等参数,可以显著提升故障响应速度和资源利用效率。
同时,精简不必要的控制器、开启证书自动轮换、配合多副本部署和 Leader 选举,能进一步提高集群的安全性与稳定性。
掌握它的原理与优化方法,是构建高可用 Kubernetes 集群的重要一步。