k8s—StatefulSet

  • StatefulSet给所有的Pod进行了编号,编号规则是:$(statefulset名称)-$(序号),从0开始。

  • Pod被删除后重建,重建Pod的网络标识也不会改变,Pod的拓扑状态按照Pod的“名字+编号”的方式固定下来,并且为每个Pod提供了一个固定且唯一的访问入口,即Pod对应的DNS记录。

  • StatefulSet所控制的节点必须通过控制器指定副本数量进行增加或回收。

  • StatefulSet所控制的节点启动与回收都是按顺序进行。

StatefulSet如何通过Headless Service维持Pod的拓扑状态

创建headless 无头服务

[root@server1 head]# cat headless.yaml
apiVersion: v1
kind: Service
metadata:
 name: nginx-svc
 labels:
  app: nginx
spec:
 ports:
 - port: 80
   name: web
 clusterIP: None
 selector:
  app: nginx
  • kubectl apply -f headless.yaml
    在这里插入图片描述
[root@server1 head]# kubectl get svc
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE
nginx-svc    ClusterIP      None             <none>         80/TCP         12s

创建statefulset服务配置文件

[root@server1 head]# cat statefulset.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: web
spec:
 serviceName: "nginx-svc"
 replicas: 1
 selector:
  matchLabels:
   app: nginx
 template:
  metadata:
   labels:
    app: nginx
  spec:
   containers:
   - name: nginx
     image: myapp:v1
     ports:
     - containerPort: 80
       name: web
     volumeMounts:
       - name: www
         mountPath: /usr/share/nginx/html
 volumeClaimTemplates:
  - metadata:
     name: www
    spec:
     storageClassName: managed-nfs-storage
     accessModes:
     - ReadWriteOnce
     resources:
      requests:
       storage: 1Gi

   app: nginx
 template:
  metadata:
   labels:
    app: nginx
  spec:
   containers:
   - name: nginx
     image: myapp:v1
     ports:
     - containerPort: 80
       name: web
     volumeMounts:
       - name: www
         mountPath: /usr/share/nginx/html
 volumeClaimTemplates:
  - metadata:
     name: www
    spec:
     storageClassName: managed-nfs-storage
     accessModes:
     - ReadWriteOnce
     resources:
      requests:
       storage: 1Gi
  • kubectl apply -f statefulset.yaml
  • kubectl get pod -w
    在这里插入图片描述
    成功运行镜像之后,会建立响应数量的pv与pvc
  • kubectl get pv

在这里插入图片描述

  • kubevtl get pvc
    在这里插入图片描述
    查看statefulset控制器
  • kubectl get statefulsets.apps
    在这里插入图片描述
    此时在nfs服务端可以看到建立起来的pv目录
    在这里插入图片描述

分别在目录中建立index.html,用于测试DNS解析与负载均衡

在master端,运行busybox镜像,测试地址解析与负载均衡。

  • kubectl run demo --image=busyboxplus -it
    通过nginx-svc可以成功解析到svc中的pod,并且访问时默认负载均衡
    在这里插入图片描述
    在这里插入图片描述
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐