01-23 statefulSet

StatefulSet有状态应用

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

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

StatefulSet的yaml文件

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一种是基于命令行

yaml 复制代码
kubectl scale sts web --replicas=5

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

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

yaml 复制代码
kubectl scale sts web -replicas=2

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

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

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

StatefulSet的镜像更新

yaml 复制代码
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

查看更新结果

yaml 复制代码
kubectl edit pod web-0 查看配置文件内容
相关推荐
vibag32 分钟前
Kubernetes(一)
java·云原生·容器·kubernetes
阿猿收手吧!36 分钟前
【Docker】Docker入门了解
linux·运维·服务器·docker·云原生·容器·eureka
仇辉攻防2 天前
【云安全】云原生-K8S-搭建/安装/部署
web安全·网络安全·docker·云原生·容器·kubernetes·k8s
山猪打不过家猪2 天前
Docker/K8S
docker·容器·kubernetes
Linux运维技术栈2 天前
0 基础学运维:解锁 K8s 云计算运维工程师成长密码
运维·kubernetes·云计算
huaweichenai2 天前
容器内判断当前的运行环境是docker还是podman
docker·容器·podman
前端 贾公子2 天前
速通Docker === Dockerfile
运维·docker·容器
仇辉攻防3 天前
【云安全】云原生-K8S-简介
web安全·网络安全·docker·云原生·容器·kubernetes·k8s
代码星辰3 天前
Docker——入门介绍
运维·docker·容器