pvpvc理解及实践
pv/pvc理解及实践一、pv/pvc简述Pv 是指 Persistent Volume,中文含义是持久化存储卷是对底层的共享存储的一种抽象,pv由管理员进行配置和创建,只要包含存储能力,访问模式,存储类型,回收策略,后段存储类型等主要信息。它和具体的底层的存储技术实现有关,比如NFS, Hostpath等,Pvc是一种用户对存储的需求声明,声明中包括了存储大小、存储类型、以及k8s中选择器的属性
pv/pvc理解及实践
一、pv/pvc简述
Pv 是指 Persistent Volume,中文含义是持久化存储卷是对底层的共享存储的一种抽象,pv由管理员进行配置和创建,只要包含存储能力,访问模式,存储类型,回收策略,后段存储类型等主要信息。它和具体的底层的存储技术实现有关,比如NFS, Hostpath等,Pvc是一种用户对存储的需求声明,声明中包括了存储大小、存储类型、以及k8s中选择器的属性等,另一个角度来看PVC和Pod类似,Pod是消耗节点node资源,PVC消耗的是PV资源,Pod可以请求CPU的内存,而PVC可以请求特定的存储空间和访问模式。
二、pv/pvc使用场景
存储工程师吧岑不是存储系统上的总空间划分成一个个小的存储块,k8s集群的管理员将存储快和pv进行一一对应,用户通过pvc 对存储进行申请,比如可以指定具体大小容量的存储,访问模式和存储类型,用户这样不用关心底层存储实现的细节,只需要直接申请使用pvc 即可,若申请的pvc 对应的 pv 不能满足用户的要求,则不会生效,pvc 会自动完成与pv 的绑定
三、创建并使用 pv
PV支持多种不同类型的存储,如:NFS、hostpath、RBD、ICCSI,文中将使用NFS为例介绍如何创建pv.
- 第一步: 搭建一个NFS共享服务器,共享目录为 /data/share
- 创建pv ,并添加NFS共享服务器地址和目录
apiVersion: v1
kind: PersistentVolume # 指定为PV类型
metadata:
name: zhaobei # 指定PV的名称
labels: # 指定PV的标签
release: zhaobei
spec:
capacity:
storage: 1Gi # 指定PV的容量
accessModes:
- ReadWriteOnce # 指定PV的访问模式,简写为RWO,只支持挂在1个Pod的读和写
persistentVolumeReclaimPolicy: Delete # 指定PV的回收策略,Recycle表示支持回收,回收完成后支持再次利用
nfs: # 指定PV的存储类型,本文是以nfs为例
path: /data/share/test-pv # 共享的地址
server: 10.9.175.79 # 服务器地址
说明:
accessModes支持多种访问模式
1)ReadWriteOnce(RWO):读写权限,但是只支持挂载在1个Node
2)ReadOnlyMany(ROX):只读权限,支持挂载在多个Node
3)ReadWriteMany(RW):读写权限,支持挂载在多个Node
persistentVolumeReclaimPolicy的策略,指的是如果PVC被释放掉后,PV的处理,这里所说的释放,指的是用户删除PVC后,与PVC对应的PV会被释放掉,PVC个PV是一一对应的关系
1)Retain,PV的数据不会清理,会保留volume,如果需要清理,需要手动进行
2)Recycle,会将数据进行清理,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持),清理完成后,PV会呈available状态,支持再次的bound
3)Delete,删除存储资源,会删除PV及后端的存储资源,比如删除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)
- 检查pv
kubectl get pv
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XiXJXQYB-1621826739919)(/Users/zhaobei/Library/Application Support/typora-user-images/image-20210524111720220.png)]
观察可发现,pv创建好了后状态的 Available,此时如果此 pv 刚好条件服务刚刚刚创建pvc 则会自动绑定。
四、创建pvc
- 编写yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc # 指定PVC的名称
spec:
resources:
requests:
storage: 1Gi # 指定PVC 容量
volumeMode: Filesystem
accessModes:
- ReadWriteOnce # 指定PVC访问模式
1)PVC声明了accessModes访问类型为ReadWriteOnce,创建后,系统会自动去找能够支持ReadWriteOnce访问类型的PV,若无符合条件的PV,则不会进行绑定,
2)PVC声明了storage的大小为0.05Gi,创建后,系统会自动去找能够支持此容量的PV,通常PV的容量至少要大于或者等于0.05Gi才会去进行绑定
从这里来看,对于用户来说,即只需要声明访问类型、容量、另外还可通过StorageClass声明具体的PV类型即可完成对持久化存储卷的申请,而不需要去维护和关注后端存储
- 查看创建结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4QlAYh2-1621826739921)(/Users/zhaobei/Library/Application Support/typora-user-images/image-20210524111955856.png)]
我发现pvc创建好了的状态的就是 Bound,这是因为在创建并声明自己要什么样子的存储的时候。我们刚刚创建的p v刚好符合条件,则自动绑定,状态变更,此时pv的状态也应该发生了变更。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVTUCqcC-1621826739922)(/Users/zhaobei/Library/Application Support/typora-user-images/image-20210524112147909.png)]
五、pod 使用pvc
- 编写yaml
apiVersion: v1
kind: Pod
metadata:
name: cqh
spec:
containers:
- name: cqh-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pv-storage
volumes:
- name: pv-storage
persistentVolumeClaim: # 挂在的是 pvc
claimName: mypvc
更多推荐
所有评论(0)