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 查看配置文件内容