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

Kubernetes 从入门到精通-StatefulSet控制器

一、StatefulSet 基础概念

1. 与 Deployment 的关键区别

特性StatefulSetDeployment
网络标识稳定的 DNS 名称随机生成
存储每个 Pod 独立 PVC,数据持久化 共享存储或无状态
启停顺序严格按序号顺序(0→N-1 启动,N-1→0 停止)并行
适用场景数据库、消息队列(如 MySQL, Kafka)Web 服务等无状态应用

2. 核心组件

  • Headless Service:提供稳定的 DNS 域名解析(无 ClusterIP),格式:svc.cluster.local
  • volumeClaimTemplates:动态为每个 Pod 创建 PVC,确保存储与 Pod 绑定。
  • Pod 标识规则:名称固定为 <StatefulSet 名称>-<序号>(如 web-0web-1)。

二、StatefulSet 核心特性解析

1. 有序部署与扩缩容

  • 扩容:从序号 0 开始顺序创建,前一个 Pod 进入 Running 状态后才创建下一个 。
  • 缩容:逆序终止(从最高序号开始),确保前置 Pod 完全终止后再处理下一个。

kubectl scale statefulset web-nginx --replicas=5  # 扩容至 5 个副本
kubectl scale statefulset web-nginx --replicas=3  # 缩容至 3 个副本

2. 持久化存储机制

  • 每个 Pod 通过 volumeClaimTemplates 自动创建独立 PVC,会为每个Pod分配并创建唯一的pvc编号,每个pvc绑定对应pv,从而保证每个Pod都有独立的存储。
# 定义卷申请模板
volumeClaimTemplates:
- metadata:name: data-volumespec:accessModes: - ReadWriteManystorageClassName: managed-nfs-storageresources:requests:storage: 2Gi

三、 StatefulSet 完整示例

1.编写配置文件

#部署nginx服务
[root@master-1 yaml]# cat sts-nginx.yaml 
apiVersion: v1
kind: Service
metadata:name: nginx-headless
spec:clusterIP: None  # Headless Service 配置无头服务selector:app: nginxports:- port: 80
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx-headless"replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.22.1imagePullPolicy: IfNotPresentvolumeMounts:- name: data-volumemountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: data-volumespec:accessModes:- ReadWriteManystorageClassName: managed-nfs-storage   #采用动态存储类resources:requests:storage: 1Gi#查看动态存储类
[root@master-1 yaml]# kubectl get sc
NAME                  PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   fuseim.pri/ifs   Delete          Immediate           false                  6m59s

2.部署验证

#部署
[root@master-1 yaml]# kubectl apply -f sts-nginx.yaml
#验证
[root@master-1 yaml]# kubectl get pods -w -o wide  | grep web#查看存储
[root@master-1 yaml]# kubectl get pvc,pv#进入容器查看网络
[root@master-1 yaml]# kubectl  exec -it web-0 -- sh

   根据以下图片发现每个pod都有独立的存储,唯一的网络标识。

       掌握 StatefulSet 的核心在于理解有序性、稳定存储与网络标识的协同设计。StatefulSet一般用于有状态服务,常用于MySQL, Kafka等场景,kafka可参考链接使用StatefulSet部署kafka服务

http://www.lqws.cn/news/505873.html

相关文章:

  • vue 路由学习
  • Lost connection to Mysql server at ‘reading initial communication packet‘如何解决?
  • 09-Python函数详解
  • Anaconda虚拟环境安装torch-gpu
  • Linux操作系统Nginx Web服务
  • C++的单例模式
  • 【PDF】Java itextpdf 生成PDF时添加自定义页脚
  • 【android bluetooth 协议分析 05】【蓝牙连接详解2】【acl_interface_t介绍】
  • C预处理详解2
  • 桌面小屏幕实战课程:DesktopScreen 7 文件系统
  • 01-StarRocks安装部署FAQ
  • HOW - 图片的一倍图、二倍图和三倍图
  • 【Pandas】pandas DataFrame merge
  • 鸿蒙开发 一 (八)、自定义绘制
  • 3DSwiper 好看的走马灯轮播图
  • Meson介绍及编译Glib库
  • 顺序表整理和单项链表01 day20
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • 【sklearn】K-means、密度聚类、层次聚类、GMM、谱聚类
  • Flutter 学习 之 mixin
  • CFDEM 介绍和使用指南
  • CUDA12.1+高版本pytorch复现Mtrans环境
  • FastMCP+python简单测试
  • 全面掌握 Nginx的功能和使用方法
  • Ingress-Nginx简介和配置样例
  • 最方便的应用构建——利用云原生快速搭建本地deepseek知识仓库
  • 程序猿成长之路之数据挖掘篇——聚类算法介绍
  • uniapp实现远程图片下载到手机相册功能
  • redis的安装及操作
  • 支持向量机(SVM):原理、实现与应用