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

【Kubernets】Deployment 和 StatefulSet 有什么区别?什么时候用 StatefulSet?

Deployment 和 StatefulSet 的区别

在 Kubernetes 中,DeploymentStatefulSet 都用于管理 Pod,但它们适用于不同的场景。


1. Deployment:管理无状态应用

特点

  • 无状态:Pod 之间相互独立,不需要保持顺序和唯一性。
  • 滚动更新:支持平滑升级和回滚。
  • 负载均衡:通过 Service 轻松实现流量分发。
  • Pod 名称动态生成:例如 nginx-deployment-xxxxx,每次重启 Pod 名称会变化。
  • 场景:适用于 Web 应用、API 网关、微服务等。

示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest

2. StatefulSet:管理有状态应用

特点

  • 有状态:每个 Pod 都有唯一的标识(如 web-0, web-1, web-2)。
  • 稳定的网络标识:每个 Pod 的 DNS 名称保持不变。
  • 持久存储:使用 PersistentVolumeClaim (PVC),即使 Pod 被销毁,数据仍然保留。
  • 顺序启动与终止:按照顺序创建和删除 Pod(web-0 -> web-1 -> web-2)。
  • 场景:适用于数据库(MySQL、PostgreSQL)、消息队列(Kafka、RabbitMQ)等。

示例

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:latest

3. Deployment 与 StatefulSet 的核心区别

特点DeploymentStatefulSet
是否有状态无状态有状态
Pod 标识动态生成,重启后变化稳定唯一(如 web-0, web-1
存储可共享存储,但不持久持久存储(通过 PVC 绑定)
启动顺序无序启动按顺序启动
场景Web 服务、API 网关数据库、消息队列

4. 什么时候用 StatefulSet?

使用 StatefulSet 的典型场景

  1. 数据库集群(如 MySQL、PostgreSQL、MongoDB)

    • 每个节点需要持久存储数据。
    • 需要主从关系或一致性。
  2. 消息队列(如 Kafka、RabbitMQ)

    • 需要唯一节点标识和持久存储。
  3. 分布式存储系统(如 Ceph、GlusterFS)

    • 每个节点有独立的存储空间,并保持顺序性。
  4. 需要有序启动/停止的应用

    • 如 ZooKeeper 或 Consul。

使用 Deployment 的典型场景

  1. 无状态 Web 应用
  2. API 网关
  3. 微服务架构
  4. 后台任务处理

🎯 总结

如果你的应用需要持久存储唯一标识顺序启动,就选择 StatefulSet
如果只是无状态服务,部署高可用和弹性扩缩容,选择 Deployment


https://github.com/0voice

相关文章:

  • WIN10隐藏文件夹怎么显示?
  • pip install和conda install的区别
  • Vue秘籍:如何动态修改页面 Title(浏览器页签名称)?
  • Shell 脚本实现内存和磁盘监控
  • C语言踩坑题:int8_t类型数据的移位或运算
  • (五)Dart 数据类型
  • 嵌入式人工智能应用- 第十章街景分类
  • 现在有分段、句子数量可能不一致的中英文文本,如何用python实现中英文对照翻译(即每行英文对应相应的中文)
  • C# 建造者模式(Builder Pattern)详细讲解
  • 一文了解CAS
  • 图片标注及流程
  • 如何使用Python的matplotlib.pyplot绘制热图和损失图
  • 二进制数(十进制转二进制)
  • ObjC NSString字符串常量编码格式是编译器决定还是ObjC语言规范决定?字符串默认编码?
  • 【VUE】day02-vue过滤器、计算属性、vue-cli、vue组件
  • ST电机库电流采样 三电阻单ADC
  • 【论文笔记】FFA-Net: Feature Fusion Attention Network for Single Image Dehazing
  • Powershell如何查询 windows defender是否开启
  • 数据库小练习
  • 函数式编程定义
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 看见“看得见的手”,看见住房与土地——读《央地之间》
  • 国泰海通合并后首份业绩报告出炉:一季度净利润增逾391%
  • 开门红背后的韧性密码:上海八大企业的“反脆弱”与“真功夫”
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始
  • 人社部:我国劳动力市场潜力足,韧性强