【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: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: 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: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: nginximage: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898011.shtml

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

相关文章

R语言零基础系列教程-03-RStudio界面介绍与关键设置

代码、讲义、软件回复【R语言03】获取。 设置位置: 菜单栏 - Tools - Blobal Options 设置 通用设置 设置面板左侧General选项 版本选择: 一般只用一个版本即可 默认工作目录设置: 你希望RStudio打开时是基于哪个目录进行工作可以不设置, 因为脚本一般都是放置在特定项目路…

车载以太网测试-9【网络层】-子网划分的子网掩码VLAN

目录 1 摘要2 子网划分2.1 子网掩码2.2 VLAN(虚拟局域网)2.2.1 IEEE 802.1Q VLAN标签2.2.1.1 VLAN标签的结构2.2.1.2 VLAN标签的插入2.2.1.3 VLAN标签的处理2.1.2.4 PVID(Port VLAN Identifier) 和 VID(VLAN Identifie…

微信小程序刷题逻辑实现:技术揭秘与实践分享

页面展示: 概述 在当今数字化学习的浪潮中,微信小程序以其便捷性和实用性,成为了众多学习者刷题备考的得力工具。今天,我们就来深入剖析一个微信小程序刷题功能的实现逻辑,从代码层面揭开其神秘面纱。 小程序界面布局…

JVM--垃圾回收

垃圾回收的概念 垃圾回收主要针对的是堆中的对象,堆是一个共享的区域,创建的对象和数组都放在这个位置。但是我们不能一直的创建对象,也不是所有的对象能一直存放,如果不进行垃圾回收,内存迟早会耗尽,及时…

【教程】继承中的访问控制 C++

目录 简介public,protected 和 private继承中的 public,protected 和 private示例 简介 在 C 中派生类可以通过 public,protected 和 private 三种修饰符决定基类成员在派生类中的访问级别 public,protected 和 private 公有成…

【2025】基于python+django的驾校招生培训管理系统(源码、万字文档、图文修改、调试答疑)

课题功能结构图如下: 驾校招生培训管理系统设计 一、课题背景 随着机动车保有量的不断增加,人们对驾驶技能的需求也日益增长。驾校作为驾驶培训的主要机构,面临着激烈的市场竞争和学员需求多样化等挑战。传统的驾校管理模式往往依赖于人工操作…

要登录的设备ip未知时的处理方法

目录 1 应用场景... 1 2 解决方法:... 1 2.1 wireshark设置... 1 2.2 获取网口mac地址,wireshark抓包前预过滤掉自身mac地址的影响。... 2 2.3 pc网口和设备对接... 3 2.3.1 情况1:... 3 2.3.2 情…

一.ffmpeg打开麦克风,录制音频并重采样

一.windows windows下使用msys编译ffmpeg,先编译libx264和libx265,然后编译ffmpeg的时候需要添加这两个库的路径才能--enable;为什么ffplay--enable了还是没有呢,仔细看编译打印,可能刚有一段报错提示SDL找不到&#…

go 安装swagger

1、依赖安装: # 安装 swag 命令行工具 go install github.com/swaggo/swag/cmd/swaglatest# 安装 gin-swagger 和 swagger 文件的依赖 go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files 2、测试 cmd中输入: swag -v 如果…

网络安全反渗透 网络安全攻防渗透

网络渗透防范主要从两个方面来进行防范,一方面是从思想意识上进行防范,另一方面就是从技术方面来进行防范。 1.从思想意识上防范渗透 网络攻击与网络安全防御是正反两个方面,纵观容易出现网络安全事故或者事件的公司和个人,在这些…

java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性

在 Java 中,泛型通配符(?)用于表示未知类型,通常用于增强泛型的灵活性。通配符可以与上下限结合使用,以限制泛型的范围。以下是通配符及上下限的使用示例: 1. 无界通配符 (?) 无界通配符表示可以接受任意…

技术视界|构建理想仿真平台,加速机器人智能化落地

在近期的 OpenLoong 线下技术分享会 上,松应科技联合创始人张小波进行了精彩的演讲,深入探讨了仿真技术在机器人智能化发展中的关键作用。他结合行业趋势,剖析了现有仿真平台的挑战,并描绘了未来理想仿真系统的设计理念与实现路径…

uniapp-x 之useAttrs只读

数据类型: useAttrs在web端拿到的是obj,app拿到的是map 是否可以修改内部元素: 否,只读 这意味着你想这样写代码将会无效 let attrsuseAttrs();console.log("attrs",attrs, attrs instanceof Map)//appif(attrs ins…

Python 正则表达式模块 re

Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式? 正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符&…

【商城实战(33)】解锁版本迭代与更新策略

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配&#xf…

环境配置 | 5分钟极简Git入门:从零上手版本控制

你是否刚接触Git?别担心!这篇指南将用最简单的步骤带你掌握Git核心操作,快速开启版本控制之旅!✨ 1.git在win10上的下载安装 1.1.下载git 打开官方网站 Git - Downloadshttps://git-scm.com/downloads ​ ​​ 1.2.git安装 …

计算机网络——DNS

一、什么是DNS? DNS(Domain Name System,域名系统) 是互联网的核心服务,负责将人类可读的域名(如 www.baidu.com)转换为机器可识别的 IP地址(如 14.119.104.254)。它像一…

SQLark 实战 | 如何从Excel、csv、txt等外部文件进行数据导入

数据导入导出是应用开发者在平时开发中最常用的操作之一,SQLark 里提供了方便的图形化界面来完成导入导出。本文先和大家分享如何从 Excel、csv、txt 等外部文件导入数据到数据库表中。 👉 前往 SQLark 官网:www.sqlark.com 下载全功能免费版…

docker无法正常拉取镜像问题的解决

目录 1.前言 2.解决方案 1.前言 安装docker后拉取镜像,遇见了如下问题: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded whil…

k8s系统学习路径

学习 Kubernetes(K8s)需要循序渐进,结合理论知识和实践操作。以下是学习 Kubernetes 的推荐步骤: 1. 先决条件 • 掌握容器基础:先学习 Docker,理解容器化概念(镜像、容器、仓库)、…