目录

一、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.pswp.cn/pingmian/87142.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87142.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87142.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 大视界 -- Java 大数据在智能医疗健康管理中的慢性病风险预测与个性化干预(330)

Java 大视界 -- Java 大数据在智能医疗健康管理中的慢性病风险预测与个性化干预(330) 引言:正文:一、Java 构建的医疗数据融合平台(多源数据安全打通)1.1 分布式医疗数据集成系统(符合 HIPAA 与…

beego打包发布到Centos系统及国产麒麟系统完整教程

1、先清除go缓存,用下面命令 go clean -cache go clean -modcache 2、更新库文件 go mod tidy 3、安装beego go install github.com/beego/bee/v2latest 4、查看bee版本 5、进行打包然后传到Centos和麒麟服务器如下代码 bee pack -be GOOSlinux -be GOARCHa…

Instagram和facebook广告对比解析

一、平台用户画像对比 用户基础数据 (1)活跃用户规模 Instagram:20亿MAU,以年轻群体为主力 Facebook:29亿MAU,覆盖全年龄段用户 (2)核心用户特征 Instagram: • 25-3…

[MIA 2025]CLIP in medical imaging: A survey

论文网址:CLIP in medical imaging: A survey - ScienceDirect 项目页面:github.com 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏…

Python通讯录系统实战教程

具体介绍见 通讯录管理系统设计与实现(C)-CSDN博客 class Person:def __init__(self, name"", sex0, age0, phone"", addr""):self.m_name name # 姓名self.m_Sex sex # 性别(1-男,2-女…

虾米壁纸分类页面代码

<template> <view class"wallpaper-category"> <custom-nav-bar title"分类列表"></custom-nav-bar> <!-- 分类展示 --> <scroll-view scroll-y class"category-scroll-view"> <view cl…

K8s-pod 调度基础

目录 Replication Controller&#xff08;RC&#xff09; 概念 关键字段 Replica Set&#xff08;RS&#xff09; 概念 关键字段 RC 与 RS 的区别 无状态应用管理Deployment 无状态应用&#xff08;Stateless Application&#xff09; 什么是无状态&#xff1f; 无状…

Vue + RuoYi 前后端分离入门手册

Vue RuoYi 前后端分离技术栈是一个非常流行且成熟的企业级后台管理系统开发方案&#xff0c;尤其在国内 Java 开发社区中广泛应用。它结合了现代化的前端框架 Vue.js 和基于 Spring Boot 的后端框架 RuoYi&#xff0c;提供了开箱即用的权限管理、代码生成、监控等功能&#xf…

JSON 安装使用教程

一、JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它广泛应用于前后端数据通信、配置文件、API 传输等场景。 二、JSON 是否需要安装&#xff1f; 不需要…

十大网络协议

十大网络协议 标题1. HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;标题2. HTTPS&#xff08;Secure Hypertext Transfer Protocol&#xff0c;安全超文本传输协议&#xff09;标题3. HTTP/3标题4. TCP&#xff08;Transmission Control…

【语音告警】博灵智能语音报警灯Modbus TCP触发告警实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以Python代码为例&#xff0c;讲解如何通过Python代码调用博灵语音通知终端A4实现声光语音告警。 本代码实现Python触发Modbus写多寄存器和写单寄存器实现调用通知终端模板播报功能&#xff08;通知终端内置TTS语音合成技术&#xff0c;本案例不讲解如何文本转…

摄像头 rtsp数据量 和正常数据流有什么区别

摄像头RTSP数据流和正常数据流&#xff08;如HTTP传输的普通文件或网页数据&#xff09;在多个方面存在显著差异&#xff0c;主要体现在协议特性、数据量、实时性、应用场景等方面。以下是具体对比&#xff1a; 1. 协议与传输方式 RTSP流&#xff1a; 实时流协议&#xff08;R…

深入理解装饰器模式:动态扩展对象功能的灵活设计模式

深入理解装饰器模式&#xff1a;动态扩展对象功能的灵活设计模式 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界…

141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示

本文分享一个前端小技巧&#xff1a;借助 OpenLayers 的 Link 交互 在浏览器地址栏实时记录地图状态&#xff0c;同时把这些参数解析出来展示在页面上。 ✨ 双向同步&#xff1a;拖动、缩放、旋转地图时&#xff0c;URL 自动更新&#xff1b;手动修改 URL 或后退 / 前进&#x…

数字人的形象与内容,虚拟形象背后的权益暗战

&#xff08;首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助&#xff09; 当某科技公司的虚拟偶像在直播间收获百万打赏时&#xff0c;当某品牌的数字代言人形象被篡改成表情包全网传播时&#xff0c;当网红博主的AI分身开始替代真人直播带货时&#xff0c;一场关于数…

【python】pdf拆成图片,加中文,再合成pdf

前期搞了个pdf加页脚&#xff0c;但是搞了半天中文加不了&#xff0c;就换了个思路。 直接说结论&#xff0c;pdf拆成图片&#xff0c;加中文&#xff0c;再合成pdf&#xff0c;会导致pdf模糊。 import os import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageFon…

分布式爬虫数据存储开发实战

分布式爬虫存储的核心矛盾在于&#xff1a;既要高吞吐又要强一致性&#xff0c;还要避免重复。比如Kafka虽然吞吐高但无法去重&#xff0c;Redis去重快但容量有限。所以我们可能低估了状态同步的复杂度——比如暂停爬虫时如何保证内存中的URL状态不丢失。 分布式爬虫的数据存储…

探秘阿里云Alibaba Cloud Linux:云时代的操作系统新宠

引言&#xff1a;云时代的操作系统变革 在云计算技术蓬勃发展的当下&#xff0c;企业的数字化转型进程被极大地加速&#xff0c;而作为云计算底层支撑的操作系统&#xff0c;也迎来了前所未有的变革与挑战。传统操作系统在应对云计算环境中的大规模资源调度、高弹性扩展以及安…

使用pyflink进行kafka实时数据消费

目录 背景 代码demo 踩坑记录 1、kafka连接器&#xff0c;kafka客户端jar包找不到 2、java模块系统访问限制 3、执行demo任务&#xff0c;一直报错连接kafka topic超时 总结 背景 实际项目中经常遇到source是kafka&#xff0c;需要实时消费kafka某个topic中的数据&#x…

软件测试理论框架与发展:分类、原则与质量保障策略

第一章 一、计算机软件的发展分类 早期软件开发的特点&#xff1a; 软件规模小、复杂程度低、开发过程不规范 测试的情况&#xff1a; 测试等同于调试 目的纠正软件的已经知道的故障 投入少&#xff0c;介入晚 成为一种发现软件的活动&#xff08;1957&#xff09; 测试不等于…