ITPub博客

kubernetes实践之四十二:StatefulSet

原创 作者:百联达 时间:2018-05-17 16:57:26 0 删除 编辑
一: 前言

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设置。
请登录后发表评论 登录
全部评论

注册时间:2013-02-05

  • 博文量
    267
  • 访问量
    874287