Kubernetes-PersistentVolumeClaim(PVC)介绍
Andya_net 人气:0
# 1 PVC介绍
PVC是用户层面,作为对存储资源的需求申请,主要包括了存储空间大小、访问模式、PV的选择条件、存储类别等信息的设置。
# 2 PVC的参数详解
## 2.1 PVC的yaml模板
```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参数说明
1. `spec.accessModes`:访问模式;描述用户应用对存储资源的访问权限。
- RWO:ReadWriteOnce,仅允许单个节点挂载进行读写;
- ROX:ReadOnlyMany,允许多个节点挂载且只读;
- RWX:ReadWriteMany,允许多个节点挂载进行读写;
2. `spec.resources.requests.storage`:资源请求的存储大小;
3. `spec.storageClassName`:存储卷模式,指定一个StorageClass资源对象的名称,具有特定类别的PV只能与请求了该类别的PVC进行绑定;(动态存储);当然,也可以设置为`spec.storageClassName=“”`,未设置特定类型的PV只能与不请求任何类型的PVC进行绑定(静态存储)。
4. `spec.selector.matchLabels`: PV的选择条件,可以通过标签匹配进行PV绑定;也可以通过`spec.selector.matchExpressions`进行条件标签描述;
# 3 PVC的生命周期
`$ kubectl get pvc`
![PVC生命周期](https://img-blog.csdnimg.cn/20200308121200246.png)
PVC一共也有4个生命周期阶段:Available/Bound/Released/Failed
- Available: 可用状态,无PV绑定;
- Bound:绑定状态,已经和某个PV绑定;
- Released:释放状态,被绑定的PV已删除,资源释放,但没有被集群回收;
- Failed:失败状态,自动资源回收失败;
# 4 PVC的常用命令
1. 创建(yaml的方式)
`$ kubectl create -f pvc.yaml`
2. 删除
`$ kubectl delete pvc pvc_name`
3. 查看所有PVC
`$ kubectl get pvc`
4. 查看某个PVC
`$ kubectl get pvc pvc_name`
5. 查看详情
`$ kubectl describe pvc pvc_name`
注意: 若在某个命名空间下,以上命令可以加上`-n ns_name`
# 5 PVC和PV的绑定
## 5.1 手动创建pv进行绑定
我们可以通过标签的方式,将pvc绑定到特定的pv上。需要做两步,一个是pv的yaml标签,另一步是pvc的标签匹配。
**举例**:
1. pv的yaml需要有`metadata.labels`进行标签标记;
如:
```yaml
[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: https://img.qb5200.com/download-x/date-nfs/k8s
server: 10.139.12.14
```
2. pvc的yaml里需要有`spec.selector.matchLabels`进行标签匹配。
```yaml
[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`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308173725524.png)
- 查看pvc
`$ kubectl get pvc test-pvc1`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308173814115.png)
我们可以看出test-pvc1持久卷声明绑定到了test-pv1这个持久卷上了。
## 5.2 动态卷配置StorageClass
除了pvc绑定手动创建pv的方式,我们还可以通过动态卷配置StorageClass跳过手动pv的方式。
1. 我们先要创建一个StorageClass资源。
```yaml
[root@k8s /sc_test]# vim test_storageclass1.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: course-nfs-storage
provisioner: fuseim.pri/ifs
```
2. 然后在pvc的yaml中增加`spec.storageClassName`进行配置。
```yaml
[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`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308175032480.png)
- 查看SC详情
`$ kubectl describe sc course-nfs-storage`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308175120309.png)
- 查看PVC
`$ kubectl get pvc test-pvc`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308175151619.png)
- 查看PV
`$ kubectl get pv`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308175420982.png)
可以看到一个自动创建的pv,它的策略是Delete,即pvc删除后会自动删除。
加载全部内容