欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 01-23 statefulSet

01-23 statefulSet

2025/2/4 19:13:12 来源:https://blog.csdn.net/mfq0622/article/details/145332616  浏览:    关键词:01-23 statefulSet

StatefulSet有状态应用

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

在这里插入图片描述

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

StatefulSet的yaml文件

apiVersion: v1
kind: service
metadata:name: nginxlabels:app: nginx  # 服务标签,选择与 nginx 相关的 pod
spec:ports:- port: 80  # 服务暴露的端口name: web  # 端口名称clusterIP: None  # 设置为无头服务,适用于 StatefulSetselector:app: nginx  # 服务选择器,根据标签 app: nginx 选择 Pod
---
apiVersion: apps/v1
kind: StatefulSet  # StatefulSet 类型的资源信息
metadata:name: web  # StatefulSet 对象的名称
spec:serviceName: "nginx"  # 服务名称,用于管理 DNSreplicas: 2  # 副本数selector:matchLabels:  # 使用 matchLabels 进行选择,与服务和 Pod 匹配app: nginx  # 选择标签为 app: nginx 的 Podtemplate:metadata:labels:app: nginx  # Pod 标签,用于与 Service 匹配spec:containers:- name: nginximage: 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 查看配置文件内容

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com