存储类(StorageClass)
当用户需要使用存储时,需要通过PVC进行绑定PV,有几种情况会出现问题(一句话就是k8s你不自能)

  • PVC需求匹配不到需要的PV
  • PVC需求量很大的时候,PV创建会很频繁
  • 用户需求无法确定,通常会随着环境而改变

存储类就是为了实现PV动态供给,对于PV进行分组管理,管理员可以自定义级别或者功能来区分使用

上篇静态的PV和PVC留给我很大的一个疑惑,就是k8s不能解放管理员双手,那么存储类就是为了实现这个而来的,就非常类似openstack的cinder功能,能自动根据PVC需求自动创建PV进行绑定,解放管理员双手

存储类字段

命令查看:kubectl explain StorageClass

  • metadata下层name字段:就是PVC字段storageClassName,很重要,匹配条件就是通过类名
  • provisioner:供给方,存储类需要依赖供给方存储插件完成存储类型的创建(也就是类似各种存储驱动,为了实现存储卷的创建)

k8s供给方存储类型不是全部都是支持,但是也支持符合规范的自定义,看下图支持情况

  • parameters:用户关联到存储卷里的参数,不同的provisioner参数不一样
  • reclaimPolicy:回收策略,Delete(默认的)和Retain(删除pvc针对pv的处理过程)
  • mountOptions:也就是mount -o选项参数(hard、ro、soft等等)
  • volumeBindingMode:对于pvc创建后的是立即绑定还是等待Pod调度的时候绑定,考虑的问题是local volume基于节点存储,或者可能后端存储网络不是全部互通的(延迟绑定可以基于Pod调度再次进行过滤条件)
    • Immediate:立即绑定(默认)
    • WaitForFirstConsumer:延迟绑定

这样可以确保PersistentVolumeClaim绑定策略将Pod可能具有的任何其他node节点约束也进行评估,例如节点资源要求、节点选择器、Pod亲和性和Pod反亲和性

  • allowVolumeExpansion:开启支持PVC动态扩容空间

举例NFS实现动态PV(NFS本身是不支持插件的)

  1. provisioner创建,基于deployment创建,需要实现存储卷的管理(本来由管理员自己手动做的是交给程序)
  2. rbac授权,因为provisioner提供者需要访问集群
  3. 创建存储类
  4. 创建PVC
  5. 创建Pod测试

整个yaml文件查看:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy

1、provisioner创建

只需要修改自己的NFS地址和路径

2、rbac授权

可以根据需求修改下namespace

3、创建存储类

provisioner:需要匹配provisioner创建env指定的名称,用于类调用
archiveOnDelete:“false” 没有感觉有什么用,作用就是删除PVC后,PV被删除,"true"就相反,跟回收策略类似

4、创建PVC

annotations:注释的作用

但是PVC这边没有指定storageClassName,PVC存储类资源是可以2种方式的,第一种storageClassName,第二种annotations(通常使用第一种)

5、创建Pod测试

claimName指定PVC定义的name名称

观察现象

1、先确保provisioner的Pod已经成功运行,一般都是镜像下载的问题,dns需要改成8.8.8.8

2、PV已经自动创建,并自动绑定,默认回收策略是delete
3、容器内查看挂载情况,帮我自动创建了单独下级目录(实现自动创建)
4、删除pvc,pv也被删除
5、修改回收策略

  1. 创建存储类指定reclaimPolicy字段
  2. 已经创建的PV通过命令:kubectl patch pv -p ‘{“spec”:{“persistentVolumeReclaimPolicy”:“Retain”}}’

6、开启默认存储类(开启需要2个条件)
开启后PVC可以不写storageClassName或annotations,默认会添加指定的默认存储类

  • kube-api需要添加DefaultStorageClass控制器(–admission-control=DefaultStorageClass)
  • kubectl patch storageclass 类名 -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:“true”}}}’

思考1
可以看到容器挂载的容量还是没有变,我PVC申请的资源是1M,相比静态的我好理解,PV是自己创建的,也就说nfs路径都要自己提前的,当然容量自己也要创建好的

关于resources字段 静态和动态的区别

  • 静态是匹配PV进行绑定的
  • 动态是创建存储卷时的卷大小(这个创建就是不同存储类型的支持插件来做的,而不用管理员)

NFS有点特殊,没法指定大小,NFS的大小是跟着第一路径的,换ceph rbd就能看到容量是1兆,因为自动创建image的时候指定的大小就是resources字段下定义的

动态PV这样看下来就已经符合我们正常需求了,用户只要确定存储类型和大小就行了(存储类型就是类的一个代表,比如是SSD的,ceph存储的)

思考2

存储类可以作为默认存储匹配,PVC先匹配静态PV绑定,没有合适的走动态绑定

参考:准入控制器
参考:存储类
参考:书籍-kubernetes进阶实战-马永亮

K8s PV和PVC(动态)相关推荐

  1. k8s——pv(静态+动态storageclass)与pvc

    k8s--pv(静态+动态storageclass)与pvc PVC和PV PV概念 PVC概念 PV与PVC之间的关系 两种PV的提供方式 基于nfs创建静态PV资源和PVC资源 配置nfs存储(1 ...

  2. Kubernetes之PV与PVC

    1. 综述 当前,存储的方式和种类有很多,并且各种存储的参数也需要非常专业的技术人员才能够了解.在Kubernetes集群中,放了方便我们的使用和管理,Kubernetes提出了PV和PVC的概念,这 ...

  3. k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战

    目录 概念 Volumes ConfigMap && Secret hostPath 模版 emptyDir 模版 PV 模版 PVC 模版 实战 volumes - hostPath ...

  4. 【k8s的持久化存储】PV、PVC、StorageClass讲解

    一.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. Pod 通常是由应用的开发人员维护,而 Volume 则通常是由存储系统的管理员维护.开发人员要获得上面 ...

  5. k8s之PV以及PVC

    一.简介 在我们整个k8s集群中,外部可能有有一些存储的资源,比如说nfs,mfs,iscsi块存储,这些存储都是由我们的存储工程师去创建的,k8s工程师想要直接去使用他们的话,肯定是很不方便的,因为 ...

  6. k8s pv pvc

    综述 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persistent Volume Claim, PVC)则类似于许可证,使有授权的应用(Po ...

  7. k8s之持久化存储PV、PVC

    目录 前言 一.k8s 容器磁盘 1.1 Volume(存储卷) 1.2 emptyDir 存储卷 1.3  hostPath存储卷 二.PV和PVC 1.PV 概念 2.PVC概念 3.PV 与 P ...

  8. K8S中PV和PVC

    前言 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的状态)重新启 ...

  9. k8s中pv和pvc如何理解

    k8s中pv和pvc如何理解 持久化与有状态应用的误区 k8s 带来的持久化问题和应用状态问题 认识PV/PVC/StorageClass 快速理解 生命周期 持久化与有状态应用的误区 刚接触k8s的 ...

最新文章

  1. UVA 116 Unidirectional TSP DP
  2. 用TLS搭建即时通讯的安全通道:LCS2005系列之三
  3. WebService(基于AXIS的WebService编程)
  4. [转]奇文-闲话操作系统(1/4)
  5. python itertools.product_Python的itertools.product 方法
  6. 百度API_获取当前详细地址
  7. 刚毕业,师傅推荐的书单
  8. 查看tsfresh提取(时间)序列特征的变量含义
  9. Codeforces 509C Sums of Digits
  10. 使用 jdbc 从数据库中查询数据
  11. 物联网技术对于智慧生活24小时改变
  12. 中缀表达式转后缀表达式,及含多位负数的中缀表达式计算(中缀转后缀解法)
  13. 《软件工程》— 实用软件工程——习题答案
  14. 半导体物理复习总结(二)——半导体中的杂质和缺陷能级
  15. Windows聚焦的图片下载
  16. Word文档中标题前面的黑点如何去掉
  17. 华为云学院给大学生的献礼:轻松玩转微认证
  18. 计算机键盘灯光怎么关闭,如何关闭机械键盘的灯[图形介绍]
  19. JavaSE StringBuffer StringBuilder 数组常见操作 Arrays 基本数据类型包装类
  20. xcode8 上传app到appStore 遇到 error ITMS90096

热门文章

  1. 正确串/并联锂电池(转)
  2. 计算机电缆设计规范,DJYPVP计算机电缆安装规范和设计原则
  3. MATLAB-机器人工具箱
  4. tensorflow与深度学习之一
  5. 中小学课程新增计算机教育,教育部通知:中小学将新增这门课?家长:真辅导不了……...
  6. Windows10家庭版 SMB共享文件 方法
  7. 如何给图片批量添加专属水印
  8. JavaScript多线程编程介绍
  9. 牛逼!这个 Python 时间格式转换工具太优秀了!
  10. iBeacon+WiFi定位技术解决室内定位一切问题,低成本+高精准室内定位