千家信息网

kubernetes实践之四十二:StatefulSet

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,一: 前言1.使用StatefulSet的场景a.稳定、唯一的网络标识b.稳定、持久的存储c.按照顺序、优雅的部署和扩容d.按照顺序、优雅的删除和终止e.按照顺序、自动滚动更新2.StatefulSe
千家信息网最后更新 2024年11月26日kubernetes实践之四十二:StatefulSet一: 前言

1.使用StatefulSet的场景
a.稳定、唯一的网络标识
b.稳定、持久的存储
c.按照顺序、优雅的部署和扩容
d.按照顺序、优雅的删除和终止
e.按照顺序、自动滚动更新

2.StatefulSet的限制
a.在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。
b.Pod存储由PersistentVolume(storage类或者管理员预先创建)提供。
c.删除或者缩容StatefulSet不会删除与StatefulSet关联的数据卷,这样能够保证数据的安全性。
d.当前的StatefulSets需要一个Headless服务来为Pod提供网络标识,此Headless服务需要通过手工创建。

二:存储供应模式
1.静态资源供应模式,通过PV和PVC完成绑定。

2.动态资源供应模式,通过StorageClass和PVC完成资源动态绑定


三: StatefulSet Nginx 应用实例

1. 创建三个pv (name分别为glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: glusterfs-nginx-0
  5. namespace: default
  6. spec:
  7. capacity:
  8. storage: 1Gi
  9. accessModes:
  10. - ReadWriteOnce
  11. glusterfs:
  12. endpoints: "glusterfs-cluster"
  13. path: "k8s-volume"
  14. readOnly: false

2.创建三个pvc (name分别为glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)

点击(此处)折叠或打开

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: glusterfs-nginx-0
  5. namespace: default
  6. spec:
  7. accessModes:
  8. - ReadWriteOnce
  9. resources:
  10. requests:
  11. storage: 1Gi
3.创建Headless服务

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx
  5. labels:
  6. name: nginx
  7. spec:
  8. ports:
  9. - port: 80
  10. targetPort: 80
  11. clusterIP: None
  12. selector:
  13. role: mongo
4.创建StatefulSet

点击(此处)折叠或打开

  1. apiVersion: apps/v1beta1
  2. kind: StatefulSet
  3. metadata:
  4. name: nginx
  5. spec:
  6. serviceName: "nginx"
  7. replicas: 3
  8. template:
  9. metadata:
  10. labels:
  11. role: nginx
  12. spec:
  13. terminationGracePeriodSeconds: 10
  14. containers:
  15. - name: nginx
  16. image: nginx
  17. ports:
  18. - containerPort: 80
  19. volumeMounts:
  20. - name: glusterfs
  21. mountPath: /usr/share/nginx/html
  22. volumeClaimTemplates:
  23. - metadata:
  24. name: glusterfs
  25. spec:
  26. accessModes: [ "ReadWriteOnce" ]
  27. resources:
  28. requests:
  29. storage: 1Gi
四:备注
1.StatfuleSet Pod拥有一个唯一的身份标识,它由顺序、稳定的网络标识和稳定的存储所组成。此身份标识一直跟随着Pod,不过它被调度到那个Node上。

2.对于拥有N个副本集的StatefulSet,在StatefulSet中的每一个Pod都会被指派一个整型的序数,此序数在0和N之间,在整个集合中是唯一的。

3.在StatefulSet中,每一个Pod的主机名称都由StatefulSet的名称和序数所组成。Pod的主机名称的格式:$(statefulset name)-$(ordinal)。如果创建了三个Pod,这他们的主机名称为web-0,web-1,web-2。StatefulSet能够使用Headless服务来控制Pod的域。Service管理的域的格式为:$(service name).$(namespace).svc.cluster.localcluster.local是集群域。对于每一个被创建的Pod,它将得到一个DNS子域,格式为: $(podname).$(governing service domain),这里的管理服务在StatefulSet中,通过serviceName设置。
0