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

K8s Pod调度基础——2

目录

一、Deployment

‌一、Deployment 原理‌

‌二、核心特性‌

‌三、意义与场景‌

‌四、示例与逐行解释‌

‌五、总结‌

StatefulSet

‌一、StatefulSet 原理‌

‌二、核心特性‌

‌三、意义与场景‌

‌四、示例与逐行解释‌

‌五、总结‌

 彼此的区别

一、本质区别‌

‌二、核心特性对比‌

1. ‌Pod 标识与网络‌

2. ‌存储管理‌

3. ‌扩缩容与更新‌

4. ‌服务发现‌

‌三、运维约束对比‌

‌四、强制使用 StatefulSet 的场景‌

‌五、总结‌


一、Deployment

一、Deployment 原理

  1. 核心功能‌:

    • 管理 ‌无状态应用‌ 的 Pod 副本集(通过控制 ReplicaSet 实现),支持声明式更新、滚动升级和回滚。
    • 通过 ‌控制器模式‌ 监听集群状态,确保实际 Pod 数量与期望值一致。
  2. 工作流程‌:

    • 版本控制‌:每次更新会创建新的 ReplicaSet,逐步替换旧 Pod(滚动更新)或直接全量替换(重建更新)。
    • 回滚机制‌:记录历史版本,可快速回退到任意修订版本。

二、核心特性

特性说明
多副本管理通过 replicas 字段维持指定数量的 Pod,自动扩缩容。
滚动更新支持逐步替换旧 Pod(可配置 maxUnavailable 和 maxSurge)。
版本回滚使用 kubectl rollout undo 回退到历史版本。
健康检查集成 Liveness/Readiness 探针,确保服务可用性。
暂停与恢复暂停更新(kubectl rollout pause)以手动调试。

三、意义与场景

  • 意义‌:
    • 实现应用发布的‌零停机更新‌,提升 DevOps 效率。
    • 为微服务提供高可用、自愈的底层支撑。
  • 典型场景‌:Web 服务、API 后端、无状态计算任务等。

四、示例与逐行解释

apiVersion: apps/v1 
kind: Deployment 
metadata:name: nginx-deploymentlabels:app: nginxspec:replicas: 3selector:matchLabels:app: nginxstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1maxSurge: 1template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19ports:- containerPort: 80livenessProbe:httpGet:path: /port: 80initialDelaySeconds: 5periodSeconds: 10 

逐行解释‌:

  1. apiVersion: apps/v1:使用 apps 组的 API 版本。
  2. kind: Deployment:声明资源类型为 Deployment。
  3. replicas: 3:维持 3 个 Pod 副本。
  4. selector.matchLabels:选择标签为 app=nginx 的 Pod 管理。
  5. strategy:定义滚动更新策略,最多允许 1 个 Pod 不可用(maxUnavailable)和 1 个临时超额 Pod(maxSurge)。
  6. template:Pod 模板,包含容器配置(Nginx 1.19 镜像)和健康检查(每 10 秒检测 80 端口)。

五、总结

Deployment 是 Kubernetes 管理无状态应用的‌核心控制器‌,通过自动化副本管理、滚动更新和回滚机制,显著提升应用部署的可靠性和灵活性。

StatefulSet

一、StatefulSet 原理

  1. 核心功能‌:

    • 管理‌有状态应用‌(如数据库、消息队列),为每个 Pod 提供‌稳定的唯一标识‌(有序编号、持久化存储、固定网络标识)。
    • 通过 ‌Headless Service‌ 为每个 Pod 分配唯一的 DNS 记录(如 pod-name.svc-name.namespace.svc.cluster.local)。
  2. 工作流程‌:

    • 有序部署/扩缩容‌:Pod 按顺序创建(从 0 到 N-1)或删除(从 N-1 到 0),确保依赖关系(如主从数据库)。
    • 持久化存储‌:通过 volumeClaimTemplates 为每个 Pod 动态绑定独立的 PersistentVolume(PV)。

二、核心特性

特性说明
稳定标识Pod 名称(如 web-0web-1)和 DNS 记录在生命周期内保持不变。
有序管理支持顺序启停(OrderedReady)或并行(Parallel)策略。
持久化存储每个 Pod 绑定独立的 PV,数据不受 Pod 重建影响。
网络稳定性通过 Headless Service 提供固定网络端点。

三、意义与场景

  • 意义‌:
    • 解决有状态应用的‌数据持久性‌和‌拓扑稳定性‌问题,填补 Deployment 的不足。
  • 典型场景‌:MySQL 集群、MongoDB 副本集、ZooKeeper 等分布式系统。

四、示例与逐行解释

apiVersion: apps/v1
kind: StatefulSet 
metadata:name: mysql 
spec:serviceName: mysql-headlessreplicas: 3selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec: containers:- name: mysqlimage: mysql:5.7ports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi 

逐行解释‌:

  1. apiVersion: apps/v1:使用 apps 组 API。
  2. kind: StatefulSet:声明资源类型。
  3. serviceName: mysql-headless:关联的 Headless Service 名称。
  4. replicas: 3:创建 3 个有序 Pod(mysql-0mysql-1mysql-2)。
  5. volumeMounts:将名为 mysql-data 的卷挂载到容器路径 /var/lib/mysql
  6. volumeClaimTemplates:为每个 Pod 动态创建 10Gi 的 PVC(名称格式为 mysql-data-mysql-X)。

五、总结

StatefulSet 是 Kubernetes 管理有状态应用的‌核心控制器‌,通过唯一标识、有序管理和持久化存储,为分布式系统提供稳定运行环境。

 彼此的区别

一、本质区别

维度DeploymentStatefulSet
设计目标管理‌无状态应用‌(Pod 可任意替换)管理‌有状态应用‌(Pod 需唯一标识与持久存储)
典型场景Web 服务、API 后端、无状态计算任务数据库(MySQL/MongoDB)、消息队列(Kafka)

二、核心特性对比

1. ‌Pod 标识与网络
  • Deployment‌:
    • Pod 名称随机生成(如 nginx-5f76c6cb6d-hx8vp),重启后改变。
    • 通过 Service 负载均衡访问,无固定网络端点。
  • StatefulSet‌:
    • Pod 名称有序固定(如 mysql-0mysql-1),生命周期内不变。
    • 每个 Pod 有独立 DNS 记录(pod-name.service-name.namespace.svc.cluster.local)。
2. ‌存储管理
  • Deployment‌:
    • Pod 共享存储卷或无持久化存储,数据随 Pod 销毁丢失。
  • StatefulSet‌:
    • 通过 volumeClaimTemplates 为每个 Pod 动态绑定独立 PV,数据持久化。
    • 存储与 Pod 严格绑定,重建后自动关联原数据。
3. ‌扩缩容与更新
  • Deployment‌:
    • 并行扩缩容,无顺序限制。
    • 支持滚动更新(RollingUpdate),可配置 maxSurge/maxUnavailable
  • StatefulSet‌:
    • 顺序操作‌:扩容从 0→N-1,缩容从 N-1→0。
    • 滚动更新默认逐个替换 Pod,保障数据一致性。
4. ‌服务发现
  • Deployment‌:
    • 通过 ClusterIP Service 实现负载均衡。
  • StatefulSet‌:
    • 依赖 ‌Headless Service‌(无 ClusterIP),直接暴露 Pod DNS。

三、运维约束对比

特性DeploymentStatefulSet
Pod 唯一性✅(固定名称/DNS)
持久化存储独占性✅(每 Pod 独立 PVC)
有序启停✅(顺序保障)
复杂度高(需配置 Headless Service + PVC)

四、强制使用 StatefulSet 的场景

  1. 需稳定网络标识‌:如数据库主从节点需固定域名通信。
  2. 独立持久化存储‌:每个 Pod 需专属数据卷(如 MySQL 主备数据分离)。
  3. 依赖启动顺序‌:集群初始化需严格按序(如 ZooKeeper 选举)。

💡 ‌例外‌:若仅需共享存储(非独占),可使用 Deployment + 共享 PVC。


五、总结

  • 无状态服务选 Deployment‌:强调弹性伸缩、简易运维(如 Web 服务)。
  • 有状态服务选 StatefulSet‌:需稳定标识、持久存储、顺序保障(如数据库集群)。
  • 慎用 StatefulSet‌:若非必要,优先用 Deployment(简化架构)。

通过此对比,可根据应用特性精准选择控制器,避免过度设计或功能缺失。

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

相关文章:

  • Langgraph 学习教程
  • 位运算经典题解
  • python+uniapp基于微信小程序的流浪动物救助领养系统nodejs+java
  • 用 YOLOv8 + DeepSORT 实现目标检测、追踪与速度估算
  • SeaTunnel 社区 2 项目中选“开源之夏 2025”,探索高阶数据集成能力!
  • 华为设备 QoS 流分类与流标记深度解析及实验脚本
  • flv.js视频/直播流测试demo
  • 欢乐熊大话蓝牙知识24:LE Secure Connections 是 BLE 的安全升级术
  • 视频内存太大怎么压缩变小一点?视频压缩的常用方法
  • Nginx重定向协议冲突解决方案:The plain HTTP request was sent to HTTPS port
  • Apache HTTP Server部署全攻略
  • 第八十六篇 大数据排序算法:从厨房整理到分布式排序的智慧
  • DBA 命令全面指南:核心操作、语法与最佳实践
  • 爱回收平台接口开发指南
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(七)
  • 打造 AI 产品的前端架构:响应式、流式、智能交互三合一
  • 基于SSM万华城市货运服务系统的设计与实现
  • OpenCV CUDA模块设备层-----反向二值化阈值处理函数thresh_binary_inv_func()
  • Python学习Day48
  • golang generic 2022-04-13
  • 技术学习_人工智能_1_神经网络是如何实现的?
  • IDE全家桶专用快捷键----------个人独家分享!!
  • 02.SpringBoot常用Utils工具类详解
  • pytorch学习—7.处理多维特征的输入
  • 通达信【极弱强势指标与股道波段交易系统】幅图
  • 【学习笔记】Python中主函数调用的方式
  • 修改Spatial-MLLM项目,使其专注于无人机航拍视频的空间理解
  • Electron 应用中的内容安全策略 (CSP) 全面指南
  • AbMole| H₂DCFDA(M9096;活性氧(ROS)探针)
  • 医学编码:临床试验数据标准化的关键