当前位置: 首页 > 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.dtcms.com/a/339318.html

相关文章:

  • Effective C++ 条款50:了解new和delete的合理替换时机
  • 实践项目-1
  • jenkins自动化部署
  • 七十二、【Linux数据库】MySQL数据库MHA集群概述 、 部署MHA集群
  • 当MySQL的int不够用了
  • GTSAM中实现多机器人位姿图优化(multi-robot pose graph optimization)示例
  • 权限管理系统
  • 动手学深度学习(pytorch版):第四章节—多层感知机(7、8)数值稳定性和模型初始化
  • 《算法导论》第 31 章 - 数论算法
  • 个人介绍CSDNmjhcsp
  • Kubernetes集群安装部署--flannel
  • Vue 2 项目中快速集成 Jest 单元测试(超详细教程)
  • 云计算学习100天-第23天
  • github 上传代码步骤
  • 【Python】新手入门:python模块是什么?python模块有什么作用?什么是python包?
  • Day13_【DataFrame数据组合merge连接】【案例】
  • 嵌入式开发学习———Linux环境下网络编程学习(三)
  • 第5.5节:awk算术运算
  • RabbitMQ:交换机(Exchange)
  • LeetCode-17day:贪心算法
  • 95、23种设计模式之建造者模式(4/23)
  • 大模型 + 垂直场景:搜索/推荐/营销/客服领域开发新范式与技术实践
  • 抓取手机游戏相关数据
  • 细化的 Spring Boot 和 Spring Framework 版本对应关系
  • c++计算器(简陋版)
  • 【全面推导】策略梯度算法:公式、偏差方差与进化
  • 差分(附带例题题解)
  • 深度学习 --- 基于ResNet50的野外可食用鲜花分类项目代码
  • 基于单片机身体健康监测/身体参数测量/心率血氧血压
  • 接口性能测试工具 - JMeter