淘先锋技术网

首页 1 2 3 4 5 6 7

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