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 绑定到特定的 pv 上. 需要做两步, 一个是 pv 的 YAML 标签, 另一步是 pvc 的标签匹配.
举例:
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.2 动态卷配置 StorageClass
除了 pvc 绑定手动创建 pv 的方式, 我们还可以通过动态卷配置 StorageClass 跳过手动 pv 的方式.
我们先要创建一个 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 删除后会自动删除.
来源: https://www.cnblogs.com/Andya/p/12443849.html