K8s PV和PVC(动态)
存储类(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本身是不支持插件的)
- provisioner创建,基于deployment创建,需要实现存储卷的管理(本来由管理员自己手动做的是交给程序)
- rbac授权,因为provisioner提供者需要访问集群
- 创建存储类
- 创建PVC
- 创建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、修改回收策略
- 创建存储类指定reclaimPolicy字段
- 已经创建的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(动态)相关推荐
- k8s——pv(静态+动态storageclass)与pvc
k8s--pv(静态+动态storageclass)与pvc PVC和PV PV概念 PVC概念 PV与PVC之间的关系 两种PV的提供方式 基于nfs创建静态PV资源和PVC资源 配置nfs存储(1 ...
- Kubernetes之PV与PVC
1. 综述 当前,存储的方式和种类有很多,并且各种存储的参数也需要非常专业的技术人员才能够了解.在Kubernetes集群中,放了方便我们的使用和管理,Kubernetes提出了PV和PVC的概念,这 ...
- k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战
目录 概念 Volumes ConfigMap && Secret hostPath 模版 emptyDir 模版 PV 模版 PVC 模版 实战 volumes - hostPath ...
- 【k8s的持久化存储】PV、PVC、StorageClass讲解
一.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. Pod 通常是由应用的开发人员维护,而 Volume 则通常是由存储系统的管理员维护.开发人员要获得上面 ...
- k8s之PV以及PVC
一.简介 在我们整个k8s集群中,外部可能有有一些存储的资源,比如说nfs,mfs,iscsi块存储,这些存储都是由我们的存储工程师去创建的,k8s工程师想要直接去使用他们的话,肯定是很不方便的,因为 ...
- k8s pv pvc
综述 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persistent Volume Claim, PVC)则类似于许可证,使有授权的应用(Po ...
- k8s之持久化存储PV、PVC
目录 前言 一.k8s 容器磁盘 1.1 Volume(存储卷) 1.2 emptyDir 存储卷 1.3 hostPath存储卷 二.PV和PVC 1.PV 概念 2.PVC概念 3.PV 与 P ...
- K8S中PV和PVC
前言 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的状态)重新启 ...
- k8s中pv和pvc如何理解
k8s中pv和pvc如何理解 持久化与有状态应用的误区 k8s 带来的持久化问题和应用状态问题 认识PV/PVC/StorageClass 快速理解 生命周期 持久化与有状态应用的误区 刚接触k8s的 ...
最新文章
- UVA 116 Unidirectional TSP DP
- 用TLS搭建即时通讯的安全通道:LCS2005系列之三
- WebService(基于AXIS的WebService编程)
- [转]奇文-闲话操作系统(1/4)
- python itertools.product_Python的itertools.product 方法
- 百度API_获取当前详细地址
- 刚毕业,师傅推荐的书单
- 查看tsfresh提取(时间)序列特征的变量含义
- Codeforces 509C Sums of Digits
- 使用 jdbc 从数据库中查询数据
- 物联网技术对于智慧生活24小时改变
- 中缀表达式转后缀表达式,及含多位负数的中缀表达式计算(中缀转后缀解法)
- 《软件工程》— 实用软件工程——习题答案
- 半导体物理复习总结(二)——半导体中的杂质和缺陷能级
- Windows聚焦的图片下载
- Word文档中标题前面的黑点如何去掉
- 华为云学院给大学生的献礼:轻松玩转微认证
- 计算机键盘灯光怎么关闭,如何关闭机械键盘的灯[图形介绍]
- JavaSE StringBuffer StringBuilder 数组常见操作 Arrays 基本数据类型包装类
- xcode8 上传app到appStore 遇到 error ITMS90096