Kubernetes Controller Manager 工作原理详解:集群自动化运维的核心引擎¶
文章摘要¶
如果说 API Server 是 Kubernetes 的统一入口,Scheduler 是 Kubernetes 的调度中心,那么 Controller Manager 就是 Kubernetes 自动化能力的核心来源。
它负责持续监控集群状态,并努力让实际状态始终保持与用户期望状态一致。
本文将详细解析 Controller Manager 的组成结构、核心控制器以及 Kubernetes 自动修复能力背后的工作原理。
学习目标¶
阅读完本文后,你将掌握:
- Controller Manager 的作用
- 什么是控制器(Controller)
- 声明式管理思想
- Deployment Controller 工作原理
- ReplicaSet Controller 工作原理
- Node Controller 工作原理
- Job Controller 工作原理
- Kubernetes 自动修复机制
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云计算学习者
- Kubernetes 面试准备人员
什么是 Controller Manager?¶
很多刚接触 Kubernetes 的同学都会有一个疑问:
为什么我删除一个 Pod 后,它又自动出现了?
例如:
几秒钟后:
发现:
Pod 又被重新创建了。
为什么?
答案就是:
Controller Manager 发现实际状态与期望状态不一致,于是自动进行了修复。
Kubernetes 的声明式管理思想¶
在传统运维中:
管理员需要:
属于命令式管理。
而 Kubernetes 更倾向于:
意思是:
至于如何实现:
全部由 Kubernetes 完成。
这种模式称为:
声明式管理(Declarative Management)
Controller Manager 在 Kubernetes 中的位置¶
用户
│
▼
API Server
│
▼
Controller Manager
│
┌─────────┼─────────┐
▼ ▼ ▼
Deployment Node Job
Controller Controller Controller
│
▼
ETCD
Controller Manager 通过 Watch API Server 持续监听资源变化。
什么是 Controller?¶
Controller 中文通常翻译为:
实际上可以理解为:
每种资源背后都有对应控制器。
例如:
| 资源 | 控制器 |
|---|---|
| Deployment | Deployment Controller |
| ReplicaSet | ReplicaSet Controller |
| Node | Node Controller |
| Job | Job Controller |
| ServiceAccount | ServiceAccount Controller |
Controller 的工作模式¶
所有 Controller 都遵循同一个逻辑:
又称:
即:
这是 Kubernetes 最核心的设计思想之一。
Deployment Controller 工作原理¶
这是日常使用最频繁的控制器。
例如:
用户期望:
当前状态正常¶
无需操作。
某个 Pod 异常¶
例如:
此时:
Deployment Controller 检测到差异。
自动修复¶
于是创建新的 Pod:
最终:
恢复一致。
ReplicaSet Controller 工作原理¶
很多人认为 Deployment 直接管理 Pod。
实际上:
真正负责维护 Pod 数量的是:
例如:
ReplicaSet Controller 会持续确保:
Node Controller 工作原理¶
负责管理节点状态。
例如:
Node 掉线¶
如果:
突然断网。
Node Controller 会持续检测心跳。
节点异常¶
超过默认时间后:
Pod 驱逐¶
持续故障:
Node Controller 会:
确保业务恢复。
Job Controller 工作原理¶
适用于一次性任务。
例如:
执行:
任务失败¶
例如:
Job Controller 会根据策略:
直到:
或者达到重试次数。
ServiceAccount Controller¶
负责自动创建:
例如:
用户创建 Namespace 后:
系统自动生成:
背后就是该控制器完成的。
Controller Manager 如何工作?¶
工作流程如下:
整个过程不断循环。
因此:
Controller Manager 与 Scheduler 的区别¶
很多新人容易混淆。
| 组件 | 职责 |
|---|---|
| Controller Manager | 保持状态一致 |
| Scheduler | 选择运行节点 |
| Kubelet | 创建容器 |
例如:
Controller Manager:
Scheduler:
Kubelet:
生产环境常见问题¶
Pod 被删除又自动恢复¶
通常是:
控制器重新创建。
Node NotReady¶
检查:
以及:
Job 一直重试¶
查看:
关注:
配置。
运维排查命令¶
查看 Controller Manager:
查看日志:
查看集群事件:
面试常见问题¶
Controller Manager 的作用是什么?¶
负责让实际状态始终接近期望状态。
Kubernetes 自动修复是谁实现的?¶
Controller Manager。
删除 Pod 为什么会自动恢复?¶
ReplicaSet Controller 检测到副本数量不足。
Controller Manager 会直接创建容器吗?¶
不会。
容器由 Kubelet 创建。
FAQ¶
Controller 和 Controller Manager 有什么区别?¶
Controller 是具体控制器。
Controller Manager 是多个控制器的管理进程。
Controller Manager 宕机会怎样?¶
已有业务正常运行。
但自动扩缩容、自动修复等功能会失效。
Controller Manager 会直接访问 ETCD 吗?¶
不会。
所有数据交互都通过 API Server。
总结¶
Controller Manager 是 Kubernetes 自动化运维能力的核心。
它通过持续运行的 Reconcile Loop:
- 发现问题
- 分析问题
- 自动修复问题
从而让集群始终保持在用户期望状态。
可以记住一句话:
Scheduler 决定 Pod 去哪里,Kubelet 负责运行 Pod,而 Controller Manager 负责确保 Pod 应该存在。