专栏首页菲宇kubernetes之StatefulSet

kubernetes之StatefulSet

StatefulSet

k8s的statefulset在1.5之后才引入的,1.5之前用的是petset,关于petset在之前的老版本的paas开发中用的就是petset,petset和statefulset都是为啦解决容器的有状态服务。 statefulset有状态应用副本集 PetSet -> StatefulSet 1.文档且唯一的网络标识符 2.稳定且持久的存储 3.有序,平滑的部署和扩展 4.有序,平滑的删除和终止 5.有序的滚动更新 三个组件: headless service StatefulSet volumeClaimTemplate

statefulset、volume、pvc、pv之间的关系

volume

volume是pod中用来挂在文件到容器中用的,支持多种的volume类型挂在,其中包括hostpath,emptydir,ceph-rbd等,,volume可以说是一个存储挂载的桥梁啦,可以通过volume关联中的persistentVolumeClaim关联pvc,然后用pvc关联的pv的存储。

pv(persistentVolume)

pv是用来向真正的存储服务器申请真正的存储资源的一个object,至于这个存储资源谁来用,那就是接下来说的pvc的职责所在。

pvc(persistentVolumeClaim)

pvc就是用来关联pv和pod的一个桥梁,当你创建啦pv的说话,如何使用它,就需要pvc来关联,两种方式:1. 在你容器中的volumeMount中指定对应的pvc的名字。2. 可以通过pod中volume关联中的persistentVolumeClaim关联pvc

statefulset

statefulset就是对应的存储的真正消费者,关联pv的方式用pvc,在你容器中的volumeMount中指定对应的pvc的名字或者可以通过pod中volume关联中的persistentVolumeClaim关联pvc

实际使用

方式1: 不通过volume的方式创建: pv

piVersion: v1
kind: PersistentVolume
metadata:
  name: datadir-aaaaa-0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 512Mi
  persistentVolumeReclaimPolicy: Retain
  rbd:
    fsType: ext4
    image: xxxxxxx
    keyring: /etc/ceph/ceph.client.admin.keyring
    monitors:
    - x.x.x.x:6789
    - x.x.x.x:6789
    - x.x.x.x:6789
    pool: admin-pool
    user: admin

statefulset

apiVersion: apps/v1beta1 kind: StatefulSet metadata: labels: app: demo name: aaaaaaaa spec: replicas: 1 selector: matchLabels: app: demo serviceName: aaaaaaaa template: metadata: labels: app: demo spec: containers: image: etcd:test imagePullPolicy: IfNotPresent name: aaaaaaaa1 resources: limits: memory: 256Mi requests: memory: 256Mi terminationMessagePath: /dev/termination-log volumeMounts: - mountPath: /etcd/data name: datadir - mountPath: /etc name: aaaaaaaa-yaowei resources: limits: cpu: 100m memory: 512Mi requests: cpu: 100m memory: 512Mi restartPolicy: Always volumeClaimTemplates:

  • metadata: creationTimestamp: null name: datadir //与 volumeMounts:中一个mount的name一致 spec: accessModes:
    • ReadWriteOnce resources: requests: storage: 512Mi

使用volume方式: pv

piVersion: v1 kind: PersistentVolume metadata: name: datadir-aaaaa-0 spec: accessModes:

  • ReadWriteOnce capacity: storage: 512Mi persistentVolumeReclaimPolicy: Retain rbd: fsType: ext4 image: xxxxxxx keyring: /etc/ceph/ceph.client.admin.keyring monitors:
    • x.x.x.x:6789
    • x.x.x.x:6789
    • x.x.x.x:6789 pool: admin-pool user: admin

pvc

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: datadir-aaaaa-0 spec: accessModes:

  • ReadWriteOnce resources: requests: storage: 512Mi statefulset

apiVersion: apps/v1beta1 kind: StatefulSet metadata: labels: app: demo name: aaaaaaaa spec: replicas: 1 selector: matchLabels: app: demo serviceName: aaaaaaaa template: metadata: labels: app: demo spec: containers: image: etcd:test imagePullPolicy: IfNotPresent name: aaaaaaaa1 resources: limits: memory: 256Mi requests: memory: 256Mi terminationMessagePath: /dev/termination-log volumeMounts: - mountPath: /etcd/data name: datadir - mountPath: /etc name: aaaaaaaa-yaowei resources: limits: cpu: 100m memory: 512Mi requests: cpu: 100m memory: 512Mi restartPolicy: Always volumes: - name: datadir persistentVolumeClaim: claimName: datadir-aaaaa-0 说明 为什么方式一中不用手动的创建pvc呢?因为statefulset的controller在创建statefulset的时候,如果他的spec中有volumeClaimTemplates存在 则会自动的创建对应的pvc,所以不用手动的创建(petset源码中也是一样的处理),而在方式二中我们是以volume的形式去引用的pvc,statefulset的controller在创建statefulset的时候不会去创建对应的pvc,如果发现对应的pvc不存在,则statefulset创建会失败,所以必须手动的创建对应的pvc

一般使用规则

一般在使用statefulset的时候,会使用到pvc pv volume等,之前的方式都是手动的或者调用api去创建对应的pv等,pv和pvc的生命周期有系统管理员来手动的管理,浪费很多时间,而且还经常出错等,一般推介的方式是结合storageclass动态的创建pv,如果在结合方式一,那基本上是pvc,pv的创建都是有k8s自身来完成(前提是得在集群中提前创建对应的storagclass),用户只要在删除对应的pvc,k8s就能动态的删除对应的pv,而且不会造成pv的申请的存储大小的浪费,一个pvc关联一个pv,pvc申请多大存储的资源,就创建多大存储资源的pv,这样特别的方法,并且动态创建的pv默认是 recycle模式的 。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django中Celery的实现介绍(一)

    Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。

    菲宇
  • python之线程、进程、协程

    上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。

    菲宇
  • django之templatetags的使用

    2、创建任意 .py 文件,如:myTag.py 3、myTag.py文件: from django import template from djang...

    菲宇
  • hihoCoder #1498 : Diligent Robots【数学】

    #1498 : Diligent Robots 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There are N jobs ...

    Angel_Kitty
  • 微服务实践分享与探讨

    服务调用关系 ? API网关优缺点 简化沟通方式 API网关对所有微服务提供单一的访问点 安全性 对客户端隐藏了服务发现和服务版本 阻止大规模攻击,包括S...

    牛嗷嗷
  • 18.2.14日报

    1,找到上次的提示null脚本错误原因,是protocol json参数没没对上。主要是

    龙泉寺扫地僧
  • Android ListView实现下拉加载功能

    本文实例为大家分享了ListView下拉加载展示的具体代码,供大家参考,具体内容如下

    砸漏
  • 人生就是不断学习和修行-2018年个人总结

    版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

    月牙寂道长
  • day25 map,filter,reduce 内置函数,作业

    =====================作业一 #用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb name=['alex','wup...

    超蛋lhy
  • 美图AB Test实践:Meepo系统

    感谢阅读「美图数据技术团队」的第 8 篇文章,关注我们持续获取美图最新数据技术动态。

    美图数据技术团队

扫码关注云+社区

领取腾讯云代金券