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

K8s中 statefulset 和deployment的区别

在 Kubernetes 中,StatefulSetDeployment 是两种管理 Pod 的控制器,它们的主要区别在于 状态管理Pod 的标识。以下是详细对比:


1. 功能定位

Deployment

  • 用途:用于 无状态应用 的部署,例如 Web 服务、API 服务等。
  • 特点
    • 每个 Pod 是完全独立的,没有严格的顺序或唯一性要求。
    • 适用于场景:服务是无状态的,多个副本的实例可以随时替换、扩缩。

StatefulSet

  • 用途:用于 有状态应用 的部署,例如数据库、分布式缓存、分布式文件系统等。
  • 特点
    • 提供对 Pod 顺序启动、停止 的控制。
    • 为每个 Pod 分配一个固定的标识(Stable Identity)。
    • 适用于场景:应用需要持久化数据或对实例的顺序、标识有严格要求。

2. Pod 标识和命名

Deployment

  • 每个 Pod 都是无状态的,没有固定的名称或标识。
  • 如果 Pod 被删除,一个新 Pod 会创建,且新 Pod 的名称不同。
  • 示例:nginx-abcdef123(随机生成的后缀)。

StatefulSet

  • 每个 Pod 都有固定的名称和编号(Stable Identity)。
  • 即使 Pod 被删除,重新创建后仍然保持相同的名称。
  • 示例:nginx-0, nginx-1, nginx-2

3. 存储卷管理

Deployment

  • 默认使用临时存储(ephemeral storage),Pod 重启后数据会丢失。
  • 如果需要持久化存储,需要手动配置 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)。

StatefulSet

  • 每个 Pod 都会拥有自己的持久化存储(Persistent Volume),并且存储卷与 Pod 的标识绑定。
  • 如果 Pod 被删除或重建,其关联的存储卷不会被删除,数据可以恢复。

4. Pod 的启动顺序

Deployment

  • Pod 的启动顺序无关紧要,Kubernetes 会尽快启动所有 Pod,彼此之间没有依赖关系。

StatefulSet

  • Pod 的启动是 有序 的:
    • 顺序启动:Pod-0 -> Pod-1 -> Pod-2...
    • 顺序删除:Pod-N -> Pod-(N-1) -> ...
    • 对于某些应用程序(如主从数据库),这种顺序启动/停止特性是必需的。

5. 更新机制

Deployment

  • 支持 滚动更新,即逐步替换旧 Pod,直到所有 Pod 更新完成。
  • 更新速度可以通过 maxSurgemaxUnavailable 参数控制。

StatefulSet

  • 同样支持滚动更新,但默认是 逐个更新(按照 Pod 的编号顺序)。
  • 需要确保新的 Pod 启动后,旧的 Pod 才会更新。

6. 应用场景

特性DeploymentStatefulSet
使用场景无状态服务有状态服务
数据持久化不提供默认支持(需手动配置)每个 Pod 绑定专属存储卷
启动顺序无关严格的顺序(0 -> N)
Pod 的标识动态生成的名称固定名称(<name>-<编号>
横向扩展支持支持
典型应用场景Web 服务、API 服务数据库、Kafka、Redis 集群

7. 示例对比

Deployment 示例

用于无状态 Web 服务:

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80
  • 部署后会创建 3 个副本 Pod,例如:nginx-xyz12, nginx-abc34, nginx-uvw56

StatefulSet 示例

用于有状态服务(如 Redis):

apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis
spec:serviceName: "redis"replicas: 3selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:6.2ports:- containerPort: 6379volumeClaimTemplates:- metadata:name: redis-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 1Gi
  • 部署后会创建 Pod:
    • redis-0, redis-1, redis-2
    • 每个 Pod 绑定自己的存储卷 redis-data-redis-0, redis-data-redis-1

8. 选择哪种控制器?

使用 Deployment 的场景

  • 无状态服务,例如:
    • Web 应用
    • API 网关
    • 任务处理服务

使用 StatefulSet 的场景

  • 有状态服务,例如:
    • 数据库(MySQL、PostgreSQL、MongoDB 等)
    • 分布式存储(Cassandra、HDFS 等)
    • 缓存服务(Redis、ZooKeeper、Kafka 等)

总结

  • Deployment 是通用的控制器,适合大多数无状态应用场景。
  • StatefulSet 则为有状态服务提供独特的支持,例如持久化存储和固定标识。
  • 根据应用是否需要持久化存储、顺序启动/停止、固定 Pod 标识来选择适合的控制器。

相关文章:

K8s中 statefulset 和deployment的区别

在 Kubernetes 中&#xff0c;StatefulSet 和 Deployment 是两种管理 Pod 的控制器&#xff0c;它们的主要区别在于 状态管理 和 Pod 的标识。以下是详细对比&#xff1a; 1. 功能定位 Deployment 用途&#xff1a;用于 无状态应用 的部署&#xff0c;例如 Web 服务、API 服务…...

springboot中的AOP以及面向切面编程思想

快速入门体验AOP aop中相关概念 实现导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建aop文件夹,里面声明XXXAspect类 @Aspect // 声…...

降低Mobx技术债问题-React前端数据流方案调研整理

我们现在主要是使用Mobx&#xff0c;但是Mobx的易于上手和灵活度也带来了很多预期以外的问题&#xff0c;随着项目的增长我们的代码技术债变得愈加沉重&#xff0c;不同的模块杂糅一起、单一store无限膨胀。 为此我们的调研是希望能找到一个更好的state配置、数据流的约定方案。…...

RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件

rabbitmq_tracing插件 rabbitmq_tracing插件相当于Firehose的GUI版本&#xff0c;它同样能跟踪RabbitMQ中消息的注入流出情况。rabbitmq_tracing插件同样会对流入流出的消息进行封装&#xff0c;然后将封装后的消息日志存入相应的trace文件中。 # 开启插件 rabbitmq-plugins …...

SQL进阶技巧:如何求解直接线上最多的点数?

目录 0 问题描述 1 数据准备 2 问题分析 3 求解优化 步骤一:构建 “斜率键” 并统计点的数量(核心步骤) 步骤二:找出最多的点数(最终结果) 0 问题描述 “平面上最多的点数” 问题通常是指在一个二维平面中给定了若干个点的坐标(例如以 (x,y) 的形式表示),要求找…...

【老白学 Java】泛型应用 - 卡拉 OK(四)

泛型应用 - 卡拉 OK&#xff08;四&#xff09; 文章来源&#xff1a;《Head First Java》修炼感悟。 上文说到&#xff0c;解决了按歌名排序的问题后&#xff0c;老白立刻想到了按歌手名字排序的问题。 老白决定趁热打铁&#xff0c;尝试着实现自定义排序方式。 Collections…...

android studio更改应用图片,和应用名字。

更改应用图标&#xff0c;和名字 先打开AndroidManifest.xml文件。 更改图片文件名字&#xff08; 右键-->构建-->重命名&#xff08;R&#xff09;&#xff09;...

SQL Server 表值函数使用示例

在 SQL Server 中,表值函数(Table-Valued Functions, TVFs)是一种用户定义函数,它可以返回一个表。表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。下面分别介绍这两种类型的表值函数及其使…...

SpringBoot项目的创建方式

目录 1.通过idea创建SpringBoot项目 2.在idea中通过aliyun创建SpringBoot 3.通过spring官网下载再用idea打开 5.通过mavenjava项目改为springboot项目 6.测试springboot 第二种方法使用的是idea2021版本&#xff0c;其余方法使用idea2017版本 1.通过idea创建SpringBoot项…...

微服务设计(第2版)读书笔记

微服务概述 什么是微服务&#xff1f; 答&#xff1a;微服务&#xff08;microservice&#xff09;是基于业务领域建模的&#xff0c;可独立发布的服务。它会把业务内聚的功能封装起来&#xff0c;并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。 微服务…...

idea无法识别文件,如何把floder文件恢复成model

前景&#xff1a; 昨天&#xff0c;我在之前的A1214模块包下新增了一个demo类&#xff0c;然后又新建了一个A1216模块&#xff0c;写了算法题&#xff0c;后面打算用git提交&#xff0c;发现之前的A1214模块下的demo类和新建的模块源文件都已经被追踪了&#xff0c;都是绿色的&…...

vscode的keil assistant 中搜索不到全局变量

搜不到 但是在包含的文件中输入 ../../../,就是全局搜索的结果 我的文件结构是&#xff1a;\Desktop\LVGL文件系统移植&#xff08;lvgl8&#xff0e;&#xff13;&#xff09;\Projects\MDK-ARM 盲猜是keil assistant 当前文件夹打开的时候是进入到了MDK-ARM文件夹层次&…...

html+css网页设计 美食 餐饮杰12个页面

htmlcss网页设计 美食 餐饮杰12个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…...

重撸设计模式--代理模式

文章目录 定义UML图代理模式主要有以下几种常见类型&#xff1a;代理模式涉及的主要角色有&#xff1a;C 代码示例 定义 代理模式&#xff08;Proxy Pattern&#xff09;属于结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…...

Redis性能调优:深入剖析变慢原因及应对策略

如果观察到&#xff0c;这个实例的运行延迟是正常 Redis 基准性能的 2 倍以上&#xff0c;即可认为这个 Redis 实例确实变慢了。 1.如何查看实例的运行延迟 &#xff08;1&#xff09;redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60 执行该命令&#xff0c;就可以测…...

Python联合Halcon的详细教程

以下是一份Python联合Halcon的详细教程&#xff1a; 一、简介 Halcon是一款由德国MVTec公司开发的高级机器视觉软件&#xff0c;提供了一套强大的图像处理库&#xff0c;包括特征检测、识别、测量等功能。Python联合Halcon是一种将Python编程语言与计算机视觉库Halcon集成的应…...

raid 状态查看 storcli64

场景 当磁盘报错的时候使用该命令排查 fdisk -l /dev/sdb fdisk: cannot open /dev/sdb: Input/output error进一步使用 smartctl 排查 smartctl -a /dev/sdb 输出 smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-144-generic] (local build) Copyright (C) 2002-19, B…...

时间管理系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

使用Docker启用MySQL8.0.11

目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制&#xff08;COPY和ADD指令&#xff09; 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…...

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...