发布时间:2026/8/19 21:16:18
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署 Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署很多人第一次在 K8s 上跑 MySQL、Redis、ZooKeeper,直接抄了个 Deployment 的 YAML,结果 Pod 一重启数据就没了,或者主从复制配了半天 IP 一变就全乱套。问题不在你,而在于有状态应用根本不该用 Deployment。这篇讲清楚 StatefulSet 解决了什么、和 Deployment 差在哪,以及一个能跑起来的完整例子。先看 Deployment 为什么不行Deployment 管理的 Pod 是「牲畜不是宠物」——它假设每个副本完全对等、可随意替换。这带来三个对有状态应用致命的问题:Pod 名字是随机的:web-7d9f8c-x2k9、web-7d9f8c-p4m1,重启后名字全变。主从复制里从库要连主库,连的地址一直变,配置根本没法写死。所有 Pod 共享同一个 PVC(或各自随机):Deployment 的多个副本挂的是同一个存储,或者用volumeClaimTemplates也没法保证 Pod 和存储的固定对应。数据库多实例各写各的盘,Deployment 给不了这种保证。启动/停止是并行、无序的:Deployment 扩容时一把全拉起来。但很多集群软件要求「先起主节点,再起从节点」,顺序错了初始化就失败。StatefulSet 就是为解决这三点而生的。StatefulSet 给的三个稳定保证1. 稳定的网络标识(Pod 名字固定且有序)。StatefulSet 的 Pod 名字是statefulset名-序号,从 0 开始:mysql-0、mysql-1、mysql-2。Pod 挂了重建,名字不变。配上一个 Headless Service,每个 Pod 还能拿到稳定的 DNS 域名:mysql-0.mysql.default.svc.cluster.local mysql-1.mysql.default.svc.cluster.local从此从库连主库,直接写mysql-0.mysql就行,永远指向 0 号 Pod,不管它重建多少次。2. 稳定的独占存储。StatefulSet 用volumeClaimTemplates给每个 Pod 生成独立的 PVC:data-mysql-0、data-mysql-1……Pod 删了再建,还是绑回原来那块盘,数据不丢。这是和 Deployment 最本质的区别。3. 有序部署与伸缩。默认按序号顺序创建(0→1→2),前一个 Ready 了才起下一个;缩容时逆序删除(2→1→0)。这正好满足「先主后从」的启动需求。一个能跑的完整例子先建 Headless Service(clusterIP: None是关键,它让 DNS 直接解析到每个 Pod 而不是负载均衡):apiVersion:v1kind:Servicemetadata:name:mysqllabels:app:mysqlspec:clusterIP:None# Headless:不分配 VIP,DNS 直接返回各 Pod IPselector:app:mysqlports:-name:mysqlport:3306再写 StatefulSet:apiVersion:apps/v1kind:StatefulSetmetadata:name:mysqlspec:serviceName:mysql# 必须指向上面那个 Headless Service,否则拿不到稳定 DNSreplicas:3selector:matchLabels:app:mysqltemplate:metadata:labels:app:mysqlspec:containers:-name:mysqlimage:mysql:8.0ports:-containerPort:3306name:mysqlenv:-name:MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name:mysql-secretkey:root-passwordvolumeMounts:-name:data# 对应下面 volumeClaimTemplates 的 namemountPath:/var/lib/mysqlvolumeClaimTemplates:# 每个 Pod 自动生成独立 PVC-metadata:name:dataspec:accessModes:[ReadWriteOnce]storageClassName:standard# 换成你集群实际的 StorageClassresources:requests:storage:10Giapply 之后观察:kubectl apply-fmysql-statefulset.yaml# Pod 名字是有序的,而且是一个一个起来的kubectl get pods-w# mysql-0 0/1 ContainerCreating# mysql-0 1/1 Running - 0 号 Ready 后才起 1 号# mysql-1 0/1 Pending# ...# 每个 Pod 有独立 PVC,名字带序号kubectl get pvc#>#>#># 从 mysql-1 连 mysql-0,地址写死也永远有效mysql-hmysql-0.mysql-uroot-p三个最容易踩的坑坑一:删了 StatefulSet,PVC 不会自动删。这其实是保护机制——防止误删丢数据。但你重建时要注意,新 StatefulSet 会复用同名的旧 PVC,里面还是老数据。想彻底清空得手动删 PVC:kubectl delete statefulset mysql# Pod 没了,但 PVC 还在kubectl get pvc#># 要清数据得手动删坑二:缩容不会删 PVC。把 replicas 从 3 改成 1,mysql-1/mysql-2的 Pod 被删,但data-mysql-1/data-mysql-2这两个 PVC 保留着。下次扩回 3,这两个 Pod 会绑回原来的盘、拿回原来的数据。这是特性不是 bug,但计费时别忘了这些「孤儿」PVC 还在占存储费。坑三:滚动更新默认也是逆序、一个一个来。StatefulSet 的updateStrategy默认是RollingUpdate,从最大序号往小更新,一次一个。这比 Deployment 慢,但对有状态服务是安全的。如果你要金丝雀验证,可以用partition只更新序号 N 的 Pod:spec:updateStrategy:type:RollingUpdaterollingUpdate:partition:2# 只更新 mysql-2,mysql-0/1 保持旧版本,验证 OK 再把 partition 调到 0什么时候该用 StatefulSet判断标准很简单:Pod 之间是不是需要「区分身份」。需要固定名字/固定存储/固定启动顺序 → StatefulSet:数据库、消息队列(Kafka/RabbitMQ)、分布式协调(ZooKeeper/etcd)、需要 sticky 会话或分片的服务。无状态、副本完全对等、随便杀随便换 → Deployment:HTTP API、前端、无状态 worker。别为了「看起来高级」把无状态服务塞进 StatefulSet,那只会让你的滚动更新变慢、扩缩容变笨。小结Deployment 的 Pod 名字随机、存储不固定、启停无序,这三点让它不适合有状态应用。StatefulSet 提供三个稳定保证:有序固定的 Pod 名字 Headless Service 给的稳定 DNS、每 Pod 独立且重建不丢的 PVC、有序的部署与伸缩。必配serviceName指向一个clusterIP: None的 Headless Service,存储用volumeClaimTemplates而不是共享 PVC。记住三个坑:删 StatefulSet 和缩容都不删 PVC(保护数据,但要手动清理);滚动更新逆序单个进行,可用partition做金丝雀。一句话记忆点:Pod 需要有名有姓有自己的盘,就用 StatefulSet;随便替换的用 Deployment。

相关新闻

2026/8/19 21:16:18

Go 的 database/sql 连接池实战:SetMaxOpenConns 怎么配、连接泄漏怎么查

Go 的 database/sql 连接池实战:SetMaxOpenConns 怎么配、连接泄漏怎么查 线上服务跑着跑着突然大面积报 Error 1040: Too many connections,或者数据库 CPU 不高但接口全在等,十有八九是 database/sql 的连接池没配好。很多人以为 sql.Open 拿到的是一条连接,其实它返回的是一…

2026/8/19 21:16:18

TopoEvo:基于多智能体与自进化学习的微服务故障根因定位框架

1. 项目概述:当微服务故障时,我们如何让系统自己“破案”?在微服务架构成为主流的今天,一个看似简单的用户请求背后,可能串联着十几个甚至几十个服务。这带来了弹性与敏捷性的同时,也让故障排查变成了一个噩…

2026/8/19 21:16:18

Autojs脚本开发前言

Autojs其实就是一个Android平台上的脚本开发工具,其与按键精灵、触动精灵等脚本开发工具类似。有些小伙伴可能知道这些脚本工具,甚至使用过这些工具进行脚本开发。如果你闲暇时间喜欢玩个游戏,并且还在玩小时候的游戏,可能这种游戏…

2026/8/19 22:16:21

LangChain中的结构化输出

模型默认返回的是⾃由⽂本,但程序需要结构化数据。以下是支持结构化输出的五种方式:前三种需要搭配with_structured_output使用,能让模型按你定义的Schema输出1.Pydantic# 定义你期望的输出结构(Pydantic 模型) from p…

2026/8/19 22:16:21

基于改进YOLOX的4-fold缺陷检测算法研究

概述 本项目旨在研究一种基于改进YOLOX的4-fold缺陷检测算法,专门针对工业金属表面4-fold缺陷识别任务。项目采用目标检测技术路线,以YOLOX\yolox_x_8xb8-300e_coco为后端算法框架,结合QT技术栈构建前端界面。数据集包含单一类别’4-fold de…

2026/8/19 22:16:21

AI Agent 开发实战(八):输出 Schema 约束与结构化输出

上一篇我们用 Harness Engineering 把 LLM 的行为范围框住,但还有一类问题没解决:输出格式。LLM 默认吐的是自由文本,而下游系统要的是 JSON、枚举、数组——格式不对,整条链路就断了。今天聊输出 Schema 约束,让 LLM …

2026/8/19 22:16:21

BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事

BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 周末想躺在沙发上把追了一个月的纪录片一口气看完,结果…

2026/8/19 22:11:21

从0到1产品设计全流程:MVP验证与PRD撰写实战指南

1. 从0到1:产品设计的核心挑战与价值 做产品,尤其是从零开始做一个新产品,听起来很酷,但真正干过的人都知道,这活儿既烧脑又烧心。它不像在现有产品上做个功能迭代,修修补补,有迹可循。从0到1&a…

2026/8/19 4:14:28

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 15:09:57

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/19 0:00:35

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:35

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:36

Agentic Web:构建智能体原生网络的基础设施挑战与四大支柱

1. 从“被动网络”到“能动网络”:一个正在发生的范式转移 如果你最近关注AI和Web技术的前沿动态,可能会频繁听到“Agentic Web”这个词。它不像“Web3”那样带着浓厚的金融色彩,也不像“元宇宙”那样充满科幻感,但它所描绘的未来…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…