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

01-23 statefulSet

StatefulSet有状态应用

StatefulSet:专门针对有状态服务进行部署的一个控制器

在这里插入图片描述

nginx的前端页面可以使用StatefulSet创建用来访问

StatefulSet的yaml文件

apiVersion: v1
kind: service
metadata:
  name: nginx
  labels:
    app: nginx  # 服务标签,选择与 nginx 相关的 pod
spec:
  ports:
  - port: 80  # 服务暴露的端口
    name: web  # 端口名称
  clusterIP: None  # 设置为无头服务,适用于 StatefulSet
  selector:
    app: nginx  # 服务选择器,根据标签 app: nginx 选择 Pod
---
apiVersion: apps/v1
kind: StatefulSet  # StatefulSet 类型的资源信息
metadata:
  name: web  # StatefulSet 对象的名称
spec:
  serviceName: "nginx"  # 服务名称,用于管理 DNS
  replicas: 2  # 副本数
  selector:
    matchLabels:  # 使用 matchLabels 进行选择,与服务和 Pod 匹配
      app: nginx  # 选择标签为 app: nginx 的 Pod
  template:
    metadata:
      labels:
        app: nginx  # Pod 标签,用于与 Service 匹配
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9  # 使用的 Nginx 镜像
        ports:
        - containerPort: 80  # 容器内暴露的端口
          name: web  # 端口名称
 下面一段可以先不加
        volumeMounts:  # 容器挂载的卷
        - name: www  # 数据卷名称
          mountPath: /usr/share/nginx/html  # 挂载到容器内的路径
  volumeClaimTemplates:  # 数据卷模板
  - metadata:  # 数据卷的元数据
      name: www  # 数据卷名称
      annotations:  # 数据卷的注解
        Volume.alpha.kubernetes.io/storage-class: anything  # 存储类(替换为集群中的有效存储类)
    spec:  # 数据卷的规格
      accessModes: [ "ReadWriteOnce" ]  # 访问模式:单节点读写
      resources:
        requests:
          storage: 1Gi  # 请求的存储大小为 1Gi

然后运行文件

在这里插入图片描述

StatefulSet扩容和缩容

StatefulSet一种是基于命令行

kubectl scale sts web --replicas=5

在这里插入图片描述

这里可以使用describe查看事件详情,可以看到扩容顺序

在这里插入图片描述

缩容的话也是将副本改为你想要的副本数

kubectl scale sts web -replicas=2

这个时候查看事件就可以看到在对之前扩容的pod在进行删除操作

这里做缩容的特点:与 Deployment 的区别:

  • Deployment:缩容时,Pod 会随机被删除,Kubernetes 并不关心 Pod 的顺序。(这个之前文章没写,后面可能会按照心情决定补不补)
  • StatefulSet:缩容时,Pod 按照 有序 的方式删除,遵循 nginx-<数字> 的顺序进行倒序删除。

在这里插入图片描述

StatefulSet的镜像更新

kubectl patch sts web --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.91"}]'
这条命令的目标是
#解析
1、`path`
path:表示对资源进行局部跟新,而不是完全替换
2、`sts web`
set:是StatefulSet的缩写
web:指定要更新的StatefulSet的名字
3、`--type='json'`
--type='json':这个选项是告诉kubectl使用json path格式进行更新
4、`-p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.91"}]'`
-p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.91"}]'
-p:表示该选项后面跟随的部分是具体的更新内容
[{"op":"replace","path","/spec/template/spec/containers/0/image","value":"nginx:1.91"}]
op: "replace" — 表示 替换操作,意思是替换目标路径下的当前值。
path: "/spec/template/spec/containers/0/image" — 这是要更新的字段路径,表示你要替换 StatefulSet 中第一个容器的镜像(image)值。具体路径如下:
/spec:表示 StatefulSet 的规范部分。
/template:表示 Pod 模板部分,Pod 模板定义了该 StatefulSet 中 Pod 的配置。
/spec:Pod 模板中的容器规范部分。
/containers/0:容器列表中的第一个容器(0 是数组索引)。
/image:容器的镜像字段。
value: "nginx:1.91" — 这是你要替换的新值,即更新容器的镜像为 nginx:1.91。

这里我们查看一下他的更新过程和结果

在这里插入图片描述

查看事件,这里可以看到是倒序有序更新

kubectl describe sts web

在这里插入图片描述

查看更新结果

在这里插入图片描述

kubectl edit pod web-0 查看配置文件内容

在这里插入图片描述


http://www.kler.cn/a/520018.html

相关文章:

  • 飞牛NAS安装过程中的docker源问题
  • 2025年1月22日(什么是扫频)
  • 数据结构——二叉树——堆(1)
  • 深度学习 Pytorch 单层神经网络
  • 使用 Elasticsearch 导航检索增强生成图表
  • ceph新增节点,OSD设备,标签管理(二)
  • python-leetcode-删除排序链表中的重复元素 II
  • SSM项目本地Tomcat部署
  • 守护资产,防范风险 | 2025年Web3.0资产安全指南
  • Vue2官网教程查漏补缺学习笔记 - 3Vue实例4模板语法5计算属性监听器
  • Elasticsearch——Elasticsearch查询实战
  • 网易前端开发面试题200道及参考答案 (下)
  • 力扣OJ(3300+)
  • Java设计模式 十八 状态模式 (State Pattern)
  • Linux/C高级(精讲)----进程、文件、shell
  • 菜鸟BUG之常见异常(二)
  • 全球AI模型百科全书,亚马逊云科技Bedrock上的100多款AI模型
  • 后端SpringBoot学习项目-用户管理-增删改查-service层
  • Centos7系统php8编译安装fileinfo扩展教程整理
  • 78,【2】BUUCTF WEB .[安洵杯 2019]不是文件
  • Spring集成Redis|通用Redis工具类
  • 81,【5】BUUCTF WEB [b01lers2020]Life on Mars
  • Leetcode刷题-滑动窗口
  • Hadoop实战-电商离线数仓学习笔记4.0
  • 基于马尔可夫链和多属性决策方法的物联网生态系统信任评分预测与管理
  • 【Git版本控制器--3】Git的远程操作