当前位置: 首页 > news >正文

Kubernetes Pod 控制器

Kubernetes Pod 控制器总结

一、控制器概述
  • 核心作用:Kubernetes 控制器是集群的 “中心大脑”,通过控制循环维持集群当前状态与期望状态一致。
  • 控制循环机制:不断对比 “预期状态”(资源清单定义)和 “真实状态”(集群实际运行状态),通过 “调谐” 操作(创建 / 删除 Pod)使两者匹配。例如:若期望 8 个 Pod 但实际只有 7 个,会自动创建 1 个;若实际有 9 个,会删除最新创建的 1 个。
二、主要 Pod 控制器类型及特点
1. ReplicationController(RC)
  • 核心功能:确保 Pod 副本数量始终与期望一致,自动替换异常退出的 Pod,回收多余 Pod。
  • 关键特性
    • 通过标签选择器管理 Pod,要求 Pod 标签必须是 RC 选择器的子集。
    • 支持通过kubectl scale rc <名称> --replicas=<数量>调整副本数。
    • 当 Pod 标签被修改导致不匹配时,RC 会创建新 Pod 维持期望数量。
  • 局限性:标签选择器功能简单,已逐步被 ReplicaSet 替代。
2. ReplicaSet(RS)
  • 核心功能:与 RC 功能类似,确保指定数量的 Pod 副本运行,是 RC 的升级版本。
  • 关键改进
    • 支持更灵活的标签选择器matchExpressions),可通过运算符(In/NotIn/Exists/DoesNotExist)定义匹配规则。
    • 例如:matchExpressions: {key: app, operator: In, values: [spring-k8s, haha]}表示匹配标签appspring-k8shaha的 Pod。
  • 使用场景:更适合复杂标签匹配需求的场景,是 Deployment 的底层依赖。
3. Deployment
  • 核心功能:基于 ReplicaSet 实现,提供声明式更新、滚动升级、回滚、扩容缩容等高级功能,是最常用的控制器。
  • 关键特性
    • 管理 RS:每个 Deployment 版本对应一个 RS,通过控制 RS 的副本数实现版本迭代(如从 v1.0 升级到 v2.0 时,新建 v2.0 的 RS 并逐步替换 v1.0 的 RS)。
    • 滚动更新:默认允许 25% 的额外 Pod(maxSurge)和 25% 的不可用 Pod(maxUnavailable),确保升级过程中服务不中断。
    • 回滚机制:通过kubectl rollout undo deployment/<名称>回滚到上一版本,或通过--to-revision=<版本号>回滚到指定版本。
    • 金丝雀部署:通过kubectl rollout pause暂停滚动,先部署少量新版本 Pod 测试,确认无误后用kubectl rollout resume继续。
  • 常用命令
    • 创建 / 更新:kubectl apply -f <yaml文件>(声明式)。
    • 调整副本数:kubectl scale deployment <名称> --replicas=<数量>
    • 更新镜像:kubectl set image deployment/<名称> <容器名>=<镜像>
    • 查看历史:kubectl rollout history deployment/<名称>
4. DaemonSet
  • 核心功能:确保每个节点(或指定节点)上运行且仅运行一个 Pod,节点加入集群时自动创建 Pod,节点移除时自动回收。
  • 典型场景
    • 集群存储(如 glusterd、ceph)。
    • 日志收集(如 fluentd、logstash)。
    • 节点监控(如 Prometheus Node Exporter)。
  • 特点:无需手动设置副本数,自动匹配集群节点数量;默认不调度到带污点(Taint)的节点(如 master 节点),需通过容忍(Toleration)配置例外。
5. Job
  • 核心功能:处理批处理任务(一次性任务),确保一个或多个 Pod 成功结束(返回码为 0)。
  • 关键参数
    • completions:需成功完成的 Pod 总数(默认 1)。
    • parallelism:并行运行的 Pod 数量(默认 1)。
    • restartPolicy:仅支持Never(不重启)或OnFailure(失败时重启)。
  • 使用场景:数据库备份、数据处理脚本等一次性任务。
6. CronJob
  • 核心功能:基于时间调度 Job,支持周期性任务(如每周备份)或一次性定时任务。
  • 关键配置
    • schedule:Cron 表达式(如*/1 * * * *表示每分钟执行一次)。
    • jobTemplate:定义要调度的 Job 模板。
    • concurrencyPolicy:并发策略(Allow默认允许并发、Forbid禁止并发、Replace替换当前运行的 Job)。
  • 局限性:最小调度单位为分钟级;创建的 Job 需是幂等操作(多次执行结果一致)。
三、控制器对比总结
控制器核心功能典型场景关键特点
ReplicationController维持固定 Pod 副本数简单场景(逐步被 RS 替代)仅支持简单标签选择器
ReplicaSet维持固定 Pod 副本数,支持复杂标签作为 Deployment 的底层依赖支持matchExpressions标签选择器
Deployment声明式更新、滚动升级、回滚无状态应用(如 Web 服务)管理 RS 实现版本控制,支持金丝雀部署
DaemonSet每个节点运行一个 Pod日志、监控、存储等节点级服务自动匹配节点数量,节点变化时自动调整
Job批处理任务(一次性)数据备份、脚本执行确保 Pod 成功结束,支持并行执行
CronJob定时 / 周期性批处理任务周期性备份、定时任务基于 Cron 表达式调度,支持并发策略

通过上述控制器,Kubernetes 可灵活管理不同类型的工作负载,从无状态服务到批处理任务,满足多样化的业务需求。

http://www.lryc.cn/news/626083.html

相关文章:

  • 基于uni-app的成人继续教育教务管理系统设计与实现
  • PyTorch自动求导
  • 开源 C++ QT Widget 开发(一)工程文件结构
  • vfs_statfs使用 查看当前文件系统一些信息情况
  • RocketMq消费者动态订阅topic
  • 聚合链路与软件网桥的原理及配置方法
  • 【LeetCode 热题 100】279. 完全平方数——(解法一)记忆化搜索
  • JVM原生的assert关键字
  • 手写C++ string类实现详解
  • 使用redis读写锁实现抢券功能
  • 怎样平衡NLP技术发展中数据质量和隐私保护的关系?
  • JVM 面试精选 20 题(续)
  • JVM对象创建和内存分配
  • SpringAI接入openAI配置出现的问题全解析
  • 今日行情明日机会——20250819
  • Java开发面试实战:Spring Boot微服务与数据库优化案例分析
  • 星图云开发者平台新功能速递 | 微服务管理器:无缝整合异构服务,释放云原生开发潜能
  • 微服务如何集成swagger3
  • 微服务-08.微服务拆分-拆分商品服务
  • UE5 使用RVT制作地形材质融合
  • idea如何设置tab为4个空格
  • CSS backdrop-filter:给元素背景添加模糊与色调的高级滤镜
  • Day08 Go语言学习
  • Ansible 中的文件包含与导入机制
  • 常见 GC 收集器与适用场景:从吞吐量到亚毫秒停顿的全景指南
  • NestJS 依赖注入方式全解
  • TDengine IDMP 运维指南(3. 使用 Ansible 部署)
  • 【上升跟庄买入】副图/选股指标,动态黄色线由下向上穿越绿色基准线时,发出买入信号
  • day32-进程与线程(5)
  • Ubuntu 下面安装搜狗输入法debug记录