• 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.local,cluster.local是集群域。对于每一个被创建的Pod,它将得到一个DNS子域,格式为: $(podname).$(governing service domain),这里的管理服务在StatefulSet中,通过serviceName设置。

    我们只需要努力,然后剩下的交给时间。
  • 相关阅读:
    [ solr入门 ] 在schema.xml中加入自己的分词工具
    SQLServer2005获取大数据集时内存不足的解决办法[转]
    java位操作基本教程[转]
    log4j的最佳实践(转)
    [ lucene扩展 ] "Did you mean" feature with Apache Lucene SpellChecker
    java image filters[02]过滤器初探
    PHP serialize 和 JSON 解析与区别
    js 实现 静态缓存页面中访问动态IP下载地址
    smarty section foreach遍历多维数组
    【转】window.open 参数
  • 原文地址:https://www.cnblogs.com/lgj8/p/14905209.html
Copyright © 2020-2023  润新知