StatefulSet是用来创建有状态应用,可以通过过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态
首先是需要有数据的持久化,及时Pod被重启后,也能恢复,与重启前保持一致。然后是应用创建的所有pod有依赖关系,顺序的创建、需要运行在指定的宿主机上,并且都有对应的网络标志
创建ststefulset前提 先创建好StorageClasse 来动态创建pv
动态创建StorageClasse连接https://blog.csdn.net/ltgsoldier1/article/details/127283739
查看stsfulset命令
k get sts -n sts
创建ststefulset配置文件
#测试statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
namespace: sts
spec:
selector:
matchLabels:
app: nginx #必须匹配 .spec.template.metadata.labels
serviceName: "nginx" #声明它属于哪个Headless Service.
replicas: 3 #副本数
template:
metadata:
labels:
app: nginx # 必须配置 .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx:1.21.1
ports:
- containerPort: 80
name: web
volumeMounts:
- name: nginx-pvc
mountPath: /usr/share/nginx/html
volumeClaimTemplates: #可看作pvc的模板
- metadata:
name: nginx-pvc
spec:
accessModes: [ "ReadWriteOnce" ] #读写权限
storageClassName: "csi-disk" #存储类storageClass名
resources:
requests:
storage: 1Gi
创建service
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: sts
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
pod内通过服务名进行访问 通过dns来查找服务地址 pod删除重建 也会通过同一个服务地址访问到 数据也会被保存
# 通过服务名访问 可提供稳定网络访问地址 pod删除重建也不会改变
# pod名.svc名.namespace名称.svc.cluster.local
curl web-0.nginx.sts.svc.cluster.local