Kubernetes中资源对象实例与资源控制器实例的控制关系是怎样的?
Kubernetes 中资源对象实例与资源控制器实例的对应关系(结合用例详解)
在 Kubernetes 中,资源对象(如 Pod、Deployment、ReplicaSet)是系统中持久化的实体,而资源控制器(如 Deployment Controller、ReplicaSet Controller)是负责管理这些对象的控制逻辑。两者通过 声明式 API 和 Watch 机制 动态协作,确保实际状态与用户声明的期望状态一致。
1. 核心概念
1.1 资源对象(Resource Object)
- 定义:Kubernetes 中的实体(如 Pod、Deployment、Service),通过 YAML/JSON 定义,存储在 etcd 中。
- 特点:
- 具有
metadata(如名称、标签)、spec(期望状态)和status(实际状态)。 - 通过
kubectl或 API Server 创建、更新或删除。
- 具有
1.2 资源控制器(Resource Controller)
- 定义:运行在控制平面中的守护进程(如 Deployment Controller、ReplicaSet Controller),负责监听对象变化并驱动系统向期望状态收敛。
- 特点:
- 每个控制器专注于管理特定类型的资源对象。
- 通过 Watch 机制 监听对象变更,触发协调逻辑(Reconciliation Loop)。
2. 对应关系模型
上层资源控制器与下层资源对象的关系是 【一对多】 的层级管理结构:
- 上层控制器管理下层对象:例如:
- Deployment Controller 管理 ReplicaSet 对象。
- ReplicaSet Controller 管理 Pod 对象。
- 对象间的所有权链:通过
ownerReferences字段建立从属关系(如 Pod 的ownerReferences指向其所属的 ReplicaSet)。
对应关系示意图:
Deployment Controller
│
└──→ 管理 Deployment 对象
│
└──→ 创建 ReplicaSet 对象
│
ReplicaSet Controller
│
└──→ 管理 ReplicaSet 对象
│
└──→ 创建 Pod 对象
│
Node 上的 kubelet
│
└──→ 管理容器运行时(如 containerd)
3. 用例分析:创建 Deployment 的完整流程
假设用户创建一个包含 2 个 Nginx 副本的 Deployment:
3.1 用户提交 Deployment 定义
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
3.2 资源对象与控制器的交互流程
步骤 1:Deployment 对象创建
- 用户操作:
kubectl apply -f deployment.yaml。 - 结果:
- Deployment 对象通过 API Server 持久化到 etcd。
Deployment Controller监听 Deployment 对象的ADDED事件,触发协调逻辑。
步骤 2:Deployment Controller 创建 ReplicaSet
- 控制器行为:
- Deployment Controller 读取 Deployment 的
spec(如replicas: 2和 Pod 模板)。 - 创建一个新的 ReplicaSet 对象(如
nginx-deployment-5c64f67f9c),并通过 API Server 写入 etcd。
- Deployment Controller 读取 Deployment 的
- 关键字段:
- ReplicaSet 的
ownerReferences指向父对象(Deployment)。 - ReplicaSet 的
spec.replicas继承自 Deployment 的spec.replicas。
- ReplicaSet 的
步骤 3:ReplicaSet Controller 创建 Pod
- 控制器行为:
ReplicaSet Controller监听 ReplicaSet 对象的ADDED事件。- 检测到 ReplicaSet 的
spec.replicas: 2,发现当前实际 Pod 数量为 0。 - 通过 API Server 创建 2 个 Pod 对象(如
nginx-deployment-5c64f67f9c-abc12和nginx-deployment-5c64f67f9c-xyz34)。
- 关键字段:
- Pod 的
ownerReferences指向其所属的 ReplicaSet。 - Pod 的标签(
app: nginx)必须匹配 ReplicaSet 的spec.selector。
- Pod 的
步骤 4:调度器(Scheduler)分配节点
- 控制器行为:
Scheduler监听未调度的 Pod(nodeName为空)。- 为每个 Pod 选择最优节点,并通过 API Server 更新 Pod 的
nodeName。
步骤 5:kubelet 启动容器
- 节点行为:
- 目标节点上的
kubelet监听到分配给本节点的 Pod。 - 调用容器运行时(如 containerd)创建容器,并更新 Pod 状态为
Running。
- 目标节点上的
4. 关键机制详解
4.1 控制器与对象的绑定关系
- Deployment → ReplicaSet:
- Deployment 通过
spec.selector匹配其管理的 ReplicaSet。 - 更新 Deployment 的 Pod 模板时,会创建新的 ReplicaSet,并逐步替换旧的 ReplicaSet。
- Deployment 通过
- ReplicaSet → Pod:
- ReplicaSet 通过
spec.selector匹配其管理的 Pod。 - 如果 Pod 被手动删除,ReplicaSet Controller 会重新创建 Pod。
- ReplicaSet 通过
4.2 ownerReferences 与垃圾回收
- 作用:建立对象间的从属关系,确保父对象删除时,子对象也被自动清理(级联删除)。
- 示例:
- 删除 Deployment 时,其关联的 ReplicaSet 和 Pod 会被自动删除。
- 直接删除 ReplicaSet 时,其关联的 Pod 也会被删除。
4.3 状态协调(Reconciliation Loop)
- 控制器行为:
- 监听对象的事件(如
ADDED、MODIFIED、DELETED)。 - 比较实际状态(如当前运行的 Pod 数量)与期望状态(如
spec.replicas)。 - 执行操作(如创建/删除 Pod)使实际状态趋近期望状态。
- 监听对象的事件(如
5. 其他用例扩展
5.1 横向扩展(Scaling)
- 用户操作:
kubectl scale deployment nginx-deployment --replicas=5。 - 控制器响应:
- Deployment Controller 更新 Deployment 的
spec.replicas。 - ReplicaSet Controller 检测到 ReplicaSet 的
spec.replicas变化,创建额外的 3 个 Pod。
- Deployment Controller 更新 Deployment 的
5.2 滚动更新(Rolling Update)
- 用户操作:更新 Deployment 的镜像版本(如
nginx:latest→nginx:1.25)。 - 控制器响应:
- Deployment Controller 创建新的 ReplicaSet(如
nginx-deployment-7b8f6c5d4f)。 - 旧 ReplicaSet 的
spec.replicas逐步减少,新 ReplicaSet 的spec.replicas逐步增加。 - 最终旧 ReplicaSet 的副本数为 0,所有流量切到新 Pod。
- Deployment Controller 创建新的 ReplicaSet(如
6. 总结:资源对象与控制器对应关系
| 资源对象 | 控制器 | 职责 | 父子关系 |
|---|---|---|---|
| Deployment | Deployment Controller | 管理 ReplicaSet,实现滚动更新和回滚 | 父对象:Deployment |
| ReplicaSet | ReplicaSet Controller | 确保 Pod 副本数与期望值一致 | 子对象:ReplicaSet |
| Pod | kubelet | 在节点上运行容器,并上报状态 | 子对象:Pod |
- 核心逻辑:控制器通过监听上层对象的变化,创建并管理下层对象,最终将用户声明的期望状态转化为实际运行状态。
通过这种层级化的管理模型,Kubernetes 实现了高度自动化的运维能力,同时保证了系统的弹性和自愈性。
学习使我充实,分享给我快乐!

浙公网安备 33010602011771号