Kubernetes-PersistentVolumeClaim(PVC)介绍
1 PVC介绍
PVC是用户层面,作为对存储资源的需求申请,主要包括了存储空间大小、访问模式、PV的选择条件、存储类别等信息的设置。
2 PVC的参数详解
2.1 PVC的yaml模板
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs-stoarge
selector:
matchLabels:
pv: test-pv1
2.2 PVC参数说明
spec.accessModes:访问模式;描述用户应用对存储资源的访问权限。
- RWO:ReadWriteOnce,仅允许单个节点挂载进行读写;
- ROX:ReadOnlyMany,允许多个节点挂载且只读;
- RWX:ReadWriteMany,允许多个节点挂载进行读写;
spec.resources.requests.storage:资源请求的存储大小;spec.storageClassName:存储卷模式,指定一个StorageClass资源对象的名称,具有特定类别的PV只能与请求了该类别的PVC进行绑定;(动态存储);当然,也可以设置为spec.storageClassName=“”,未设置特定类型的PV只能与不请求任何类型的PVC进行绑定(静态存储)。spec.selector.matchLabels: PV的选择条件,可以通过标签匹配进行PV绑定;也可以通过spec.selector.matchExpressions进行条件标签描述;
3 PVC的生命周期
$ kubectl get pvc

PVC一共也有4个生命周期阶段:Available/Bound/Released/Failed
- Available: 可用状态,无PV绑定;
- Bound:绑定状态,已经和某个PV绑定;
- Released:释放状态,被绑定的PV已删除,资源释放,但没有被集群回收;
- Failed:失败状态,自动资源回收失败;
4 PVC的常用命令
- 创建(yaml的方式)
$ kubectl create -f pvc.yaml - 删除
$ kubectl delete pvc pvc_name - 查看所有PVC
$ kubectl get pvc - 查看某个PVC
$ kubectl get pvc pvc_name - 查看详情
$ kubectl describe pvc pvc_name
注意: 若在某个命名空间下,以上命令可以加上-n ns_name
5 PVC和PV的绑定
5.1 PV和PVC的生命周期

by 《k8s 权威指南》
其实,使用共享存储就几步:
Pod(Deployment等配置好PVC)—>PVC—>PV—>存储资源。
资源供应
PVC使用存储资源可以通过静态绑定或者动态绑定,静态模式就是集权管理员预先创建对应的PV对存储特性进行设置;动态模式就是集权管理员预先创建好StorageClass资源对后端存储进行描述,PVC创建时对存储类型进行声明,PVC创建后,k8s会自动创建合适的PV与PVC进行绑定。资源绑定
创建好PVC后,PVC会在已存在的PV中选择合适的PV进行绑定(可以通过标签进行特定绑定,也可以不通过标签,系统会自动选择合适(容量大小等参数)的PV进行绑定。),绑定成功,状态变成Bound,且该PV被对应的PVC独占绑定,不可以再被其他PVC绑定,除非该PVC释放。若在k8s系统中没有找到合适的PV,则PVC一直处于Pending状态。资源使用
在Deployment等资源中,通过spec.template.spec.volumes:进行PVC挂载路径设置。
spec:
tempeate:
spec:
containers:
- name: container1
image: image1
volumeMounts:
- name: volume1
mountPath: /data/dir1
volumes:
- name: volume1
persistentVolumeClaim:
claimName: pvc1
资源释放
删除PVC,与该PVC绑定的PV状态就会变成“Released”,该PVC在存储设备上的数据删除后,对应的PV才能与其他的PVC进行绑定。资源回收
PV中可以通过spec.persistentVolumeReclaimPolicy设置回收策略,这个主要用于绑定的PVC删除后,资源释放后如何处理该PVC在存储设备上写入的数据。
- Retain:保留,删除PVC后,PV保留数据;
- Recycle:回收空间,删除PVC后,简单的清除文件;(NFS和HostPath存储支持)
- Delete:删除,删除PVC后,与PV相连接的后端存储会删除数据;(AWS EBS、Azure Disk、Cinder volumes、GCE PD支持)
5.2 手动创建pv进行绑定
我们可以通过标签的方式,将pvc绑定到特定的pv上。需要做两步,一个是pv的yaml标签,另一步是pvc的标签匹配。

by 《k8s权威指南》
举例:
- pv的yaml需要有
metadata.labels进行标签标记;
如:
[root@k8s /pv_test]# vim test_pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv1
labels:
pv: test-pv1
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /date-nfs/k8s
server: 10.139.12.14
- pvc的yaml里需要有
spec.selector.matchLabels进行标签匹配。
[root@k8s /pvc_test]# vim test_pvc1.yaml
#persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc1
namespace: t1
spec:
#storageClassName: managed-nfs-storage
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
selector:
matchLabels:
pv: test-pv1
创建pv和pvc
$ kubectl create -f test_pv.yaml
$ kubectl create -f test_pvc.yaml查看pv
$ kubectl get pv test-pv1

查看pvc
$ kubectl get pvc test-pvc1

我们可以看出test-pvc1持久卷声明绑定到了test-pv1这个持久卷上了。
5.3 动态卷配置StorageClass
除了pvc绑定手动创建pv的方式,我们还可以通过动态卷配置StorageClass跳过手动pv的方式。

by 《k8s权威指南》
- 我们先要创建一个StorageClass资源。
[root@k8s /sc_test]# vim test_storageclass1.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: course-nfs-storage
provisioner: fuseim.pri/ifs
- 然后在pvc的yaml中增加
spec.storageClassName进行配置。
[root@k8s /pvc_test]# vim test_pvc_sc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: course-nfs-storage
resources:
requests:
storage: 1Mi
创建StorageClass和PVC资源
$ kubectl create -f test_storageclass1.yaml
$ kubectl create -f test_pv_sc.yaml查看SC
$ kubectl get sc course-nfs-storage

查看SC详情
$ kubectl describe sc course-nfs-storage

查看PVC
$ kubectl get pvc test-pvc

查看PV
$ kubectl get pv

可以看到一个自动创建的pv,它的策略是Delete,即pvc删除后会自动删除。
Kubernetes-PersistentVolumeClaim(PVC)介绍的更多相关文章
- Kubernetes Pv & Pvc
Kubernetes PV & pvc 介绍 PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节.管理 ...
- 二十四、PV与PVC介绍
PV 与 PVC介绍 一.概念介绍 PersistentVolume (PV) 是由管理员设置的存储,它是群集的一部分.就像节点是集群中的资源一样,PV 也是集群中的资源. PV 是Volume 之 ...
- Kubernetes中StatefulSet介绍
StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...
- Kubernetes 存储系统 Storage 介绍
本文环境为Kubernetes V1.11,操作系统版本为 CentOs 7.3,Kubernetes集群安装可以参考 kubeadm安装kubernetes V1.11.1 集群 容器中的存储都是临 ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
- Kubernetes 存储系统 Storage 介绍:PV,PVC,SC
要求:先了解数据docker容器中数据卷的挂载等知识 参考网址: https://www.cnblogs.com/sanduzxcvbnm/p/13176938.html https://www.cn ...
- [Kubernetes]PV,PVC,StorageClass之间的关系详解
在Kubernetes中,容器化一个应用比较麻烦的地方莫过于对其"状态"的管理,而最常见的"状态",莫过于存储状态. 在[Kubernetes]深入理解Stat ...
- 一、Kubernetes系列之介绍篇
•Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什 ...
- kubernetes资源类别介绍
类别 名称 资源对象 Pod.ReplicaSet.ReplicationController.Deployment.StatefulSet.DaemonSet.Job.CronJob.Horizon ...
- Kubernetes PV/PVC使用实践
转载于https://www.cnblogs.com/ericnie/p/7733281.html pv,pvc的概念不解释了,之前在registry中已经使用过PV和PVC,现在想把WebLog ...
随机推荐
- logstash nested内嵌字段 field protobuf解码 codec 的解决办法
logstash nested内嵌字段 field protobuf解码 codec 的解决办法 主要需求 logstash-codec 下https://www.elastic.co/guide/e ...
- 2. Unconstrained Optimization(2th)
2.1 Basic Results on the Existence of Optimizers 2.1. DefinitionLet $f:U->\mathbb{R}$ be a functi ...
- An internal error occurred during: "Redeploy".
原因:项目中JDK使用的版本与现在使用的JDK版本不同所致. 解决方法:右键选择项目>properties>java Build Path>Libraries 查看下面的JRE Sy ...
- Python练习五-函数
1.简述普通参数.指定参数.默认参数.动态参数的区别1)普通参数中,有形参和实参,其中形参是定义函数时写的参数,实参是调用函数时传给函数的参数:2)默认参数是在定义函数时,参数设定一个默认值:3)指定 ...
- linux配置和查看环境变量
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等等. 一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要 ...
- ACG记录整理
资料来源 日文维基百科 bangumi番组计划 中文维基百科 百度百科 豆瓣电影 资料类型 テレビアニメ OVA アニメ映画 Webアニメ 内容说明 番名,带超链接介绍,尽量选用国内网站介绍, ...
- Qt QString的arg()方法的使用
1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...
- 读写分离(AMOEBA)
博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 1. 环境准备: 1.1新增一台虚拟机 amoeba:192.168.247.80 架构(使用图片源自其它博文): 1. ...
- 路由配置(route IP
转载于:http://blog.csdn.net/chenlycly/article/details/52141854 使用下面的 route 命令可以查看 Linux 内核路由表. # route ...
- JDBC介绍和Mybatis运行原理及事务处理
本博客内容非自创,转载自以下三位,侵删: https://juejin.im/post/5ab7bd11f265da23906bfbc5 https://my.oschina.net/fifadxj/ ...