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参数说明

  1. spec.accessModes:访问模式;描述用户应用对存储资源的访问权限。
  • RWO:ReadWriteOnce,仅允许单个节点挂载进行读写;
  • ROX:ReadOnlyMany,允许多个节点挂载且只读;
  • RWX:ReadWriteMany,允许多个节点挂载进行读写;
  1. spec.resources.requests.storage:资源请求的存储大小;
  2. spec.storageClassName:存储卷模式,指定一个StorageClass资源对象的名称,具有特定类别的PV只能与请求了该类别的PVC进行绑定;(动态存储);当然,也可以设置为spec.storageClassName=“”,未设置特定类型的PV只能与不请求任何类型的PVC进行绑定(静态存储)。
  3. spec.selector.matchLabels: PV的选择条件,可以通过标签匹配进行PV绑定;也可以通过spec.selector.matchExpressions进行条件标签描述;

3 PVC的生命周期

$ kubectl get pvc
PVC生命周期
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的生命周期

生命周期

by 《k8s 权威指南》

其实,使用共享存储就几步:
Pod(Deployment等配置好PVC)—>PVC—>PV—>存储资源。

  1. 资源供应
    PVC使用存储资源可以通过静态绑定或者动态绑定,静态模式就是集权管理员预先创建对应的PV对存储特性进行设置;动态模式就是集权管理员预先创建好StorageClass资源对后端存储进行描述,PVC创建时对存储类型进行声明,PVC创建后,k8s会自动创建合适的PV与PVC进行绑定。

  2. 资源绑定
    创建好PVC后,PVC会在已存在的PV中选择合适的PV进行绑定(可以通过标签进行特定绑定,也可以不通过标签,系统会自动选择合适(容量大小等参数)的PV进行绑定。),绑定成功,状态变成Bound,且该PV被对应的PVC独占绑定,不可以再被其他PVC绑定,除非该PVC释放。若在k8s系统中没有找到合适的PV,则PVC一直处于Pending状态。

  3. 资源使用
    在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
  1. 资源释放
    删除PVC,与该PVC绑定的PV状态就会变成“Released”,该PVC在存储设备上的数据删除后,对应的PV才能与其他的PVC进行绑定。

  2. 资源回收
    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权威指南》

举例

  1. 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
  1. 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权威指南》

  1. 我们先要创建一个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

  1. 然后在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中的PersistentVolume(PV)和PersistentVolumeClaimPVC)是用于管理持久化存储的对象。以下是创建持久化存储的步骤: 1. 创建持久化存储 首先,您需要创建一个持久化存储。这可以是本地存储或远程存储,例如AWS EBS或GCP Persistent Disk。以下是一个本地存储的示例: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: my-local-pv spec: storageClassName: local-storage capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/data ``` 2. 创建持久化存储声明 创建PVC对象来声明您需要的存储容量和访问模式。以下是一个示例: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 5Gi ``` 3. 将PVC与应用程序绑定 最后,您需要将PVC绑定到您的应用程序中。以下是一个Deployment对象的示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: my-image volumeMounts: - name: my-pv-storage mountPath: /data volumes: - name: my-pv-storage persistentVolumeClaim: claimName: my-pvc ``` 在这个例子中,您需要将my-pvc PVC对象与my-pv-storage持久绑定,然后将持久挂载到my-container容器的/data目录中。现在,您的应用程序将可以访问持久化存储,并且该存储将在应用程序中使用期间持久存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值