k8s中控制器的使用
2026/8/27 9:17:08 网站建设 项目流程

1 概念

控制器本质是无限循环的控制循环(调谐循环/Reconcile Loop)

工作模式:持续监听集群状态,对比期望状态(yaml spec定义)集群实际状态,两者不一样就做操作,把实际状态往期望状态对齐。

通俗类比:家里的空调温控器。你设定26℃(期望状态),温度计读取房间当前温度(实际状态);高于26就制冷,低于26就停止,不停循环,维持目标温度。K8s控制器就相当于这个温控器。

工作流程(控制循环)

  1. 通过apiserver监听资源变化,读取期望状态(写在yaml里,保存在etcd)
  2. 获取集群当前真实状态
  3. 对比两者是否一致
  4. 不一致,执行调谐操作:创建/删除/更新Pod等资源
  5. 回到第一步,无限循环监控

2 控制器常用类型

控制器作用典型场景
Deployment管理无状态应用,底层调用ReplicaSet,支持滚动更新、版本回滚web服务、后端API,绝大多数无状态业务
ReplicaSet保证指定数量Pod副本持续运行,很少直接使用,由Deployment调用维持副本数,Deployment底层组件
StatefulSet管理有状态应用,Pod有稳定网络标识、稳定存储,有序启停MySQL、Redis集群、ZooKeeper等数据库类服务
DaemonSet每(选定)个节点上运行且仅运行1个Pod日志采集、监控agent、节点代理
Job一次性任务,直到Pod成功执行完成退出数据备份、批量计算,跑完就结束
CronJob定时Job,按cron周期执行定时任务定时备份、定时报表任务

举个Deployment例子

yaml写replicas:3,期望运行3个nginx Pod。

  • 如果节点宕机,只剩1个Pod,控制器会自动新建2个Pod,凑够3个。
  • 如果手动多创建了Pod,控制器会删掉多余Pod,保证副本数=3。
  • 修改镜像版本,控制器滚动创建新Pod,逐步销毁旧Pod,实现不停服更新。

3 replicaset控制器

3.1 replicaset功能

ReplicaSet 是下一代的 Replication Controller,官方推荐使用

ReplicaSet ReplicaSet和Replication Controller的唯一区别是选择器的支持,ReplicaSet支持新的基于集合的 选择器需求

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行

虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的 机制

3.2 replicaset参数说明

参数名称字段类型参数说明
specObject详细定义对象,固定值就写 Spec
spec.replicasinteger指定维护 pod 副本数量
spec.selectorObjectSelector 是对 pod 的标签查询,与 pod 数量匹配
spec.selector.matchLabelsstring指定 Selector 查询标签的名称和值,以 key: value 方式指定
spec.templateObject指定对 pod 的描述信息,比如 lab 标签,运行容器的信息等
spec.template.metadataObject指定 pod 属性
spec.template.metadata.labelsstring指定 pod 标签
spec.template.specObject详细定义对象
spec.template.spec.containerslistSpec 对象的容器列表定义
spec.template.spec.containers.namestring指定容器名称
spec.template.spec.containers.imagestring指定容器镜像

3.3 Replicaset控制器示例

3.3.1 建立控制器

3.3.2 测试功能

4 deployment 控制器

4.1 deployment控制器的功能

  1. 副本管理:维持指定数量 Pod 副本,Pod 故障销毁会自动重建。
  2. 滚动更新(重点):版本升级,逐步替换旧 Pod,业务不中断;底层生成新 ReplicaSet,旧 ReplicaSet 保留用于回滚。
  3. 版本回滚:更新出错时,可以回退到历史版本,复用旧 ReplicaSet。
  4. 副本扩缩容:支持 scale 命令修改副本数量。
  5. 版本历史保存:保留旧版本 ReplicaSet 历史记录,用于回滚。

典型的应用场景:

  • 用来创建Pod和ReplicaSet
  • 滚动更新和回滚
  • 扩容和缩容
  • 暂停与恢复

4.2 deployment控制器示例

4.2.1 监控

4.2.2 建立deployment控制器

4.2.3 升级和回滚

升级

回滚


4.2.4 设定更新策略

4.2.5 更新暂停和恢复

5 DaemonSet

5.1 DaemonSet 功能Kubernetes

核心定义

DaemonSet 是 Kubernetes 的工作负载控制器,保证集群全部或者指定一部分节点上,有且仅有一个该 Pod 副本

  • 新节点加入集群:DaemonSet 自动在新节点创建 Pod
  • 节点从集群移除:对应节点上的 Pod 会被自动回收删除
  • 删除 DaemonSet 资源:它管理的所有 Pod 全部被删除

典型使用场景(系统级守护进程)

  1. 网络插件:Calico、Flannel,每个节点部署网络代理,负责节点网络通信
  2. 日志采集:Filebeat,每个节点收集宿主机容器日志
  3. 监控代理:Node‑Exporter,采集每台节点硬件、系统指标
  4. 存储组件:Ceph 客户端,节点本地存储相关守护进程
  5. 硬件相关:节点硬件监控、驱动代理等需要访问宿主机资源的程序

5.2 daemonset 示例

6 job 控制器

6.1 job控制器功能

核心概念

Job 属于 K8s 一次性任务控制器,用来执行一次性、跑完就结束的任务

Deployment 是长期不停止的服务;Job 是任务完成,Pod 就正常退出(状态 Completed)

Job 核心能力

  1. 创建 Pod,执行任务,直到 Pod成功正常结束(退出码 0),标记 Job 完成。
  2. 如果 Pod 异常失败(报错、崩溃),Job 会自动新建 Pod 重试执行。
  3. 任务成功完成之后不会再创建新 Pod,保留已经完成的 Pod 记录。

6.2 job 控制器示例

7 cronjob 控制器

7.1 cronjob 控制器功能

  • Cron Job 创建基于时间调度的 Jobs。
  • CronJob控制器以Job控制器资源为其管控对象,并借助它管理pod资源对象,
  • CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的 方式。
  • CronJob可以在特定的时间点(反复的)去运行job任务。

7.2 cronjob 控制器 示例

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询