PersistentVolumeClaim

  • Post author:
  • Post category:其他


本文个人博客地址:

https://www.huweihuang.com/kubernetes-notes/storage/persistent-volume-claim.html



PersistentVolumeClaim



1. PVC概述


PersistentVolumeClaim

(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。

当需要不同性质的PV来满足存储需求时,可以使用

StorageClass

来实现。

每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}



2. PVC的属性



2.1. accessModes

对应存储的访问模式,例如:

ReadWriteOnce



2.2. volumeMode

对应存储的数据卷模式,例如:

Filesystem



2.3. resources

声明可以请求特定数量的资源。相同的

资源模型

适用于Volume和PVC。



2.4. selector

声明

label selector

,只有标签与选择器匹配的卷可以绑定到声明。

  • matchLabels:volume 必须有具有该值的标签
  • matchExpressions:条件列表,通过条件表达式筛选匹配的卷。有效的运算符包括 In、NotIn、Exists 和 DoesNotExist。



2.5. storageClassName

通过

storageClassName

参数来指定使用对应名字的

StorageClass

,只有所请求的类与 PVC 具有相同

storageClassName

的 PV 才能绑定到 PVC。

PVC可以不指定storageClassName,或者将该值设置为空,如果打开了准入控制插件,并且指定一个默认的

StorageClass

,则PVC会使用默认的

StorageClass

,否则就绑定到没有

StorageClass

的 PV上。

之前使用注解

volume.beta.kubernetes.io/storage-class

而不是

storageClassName

属性。这个注解仍然有效,但是在未来的 Kubernetes 版本中不会支持。



3. 将PVC作为Volume

将PVC作为Pod的Volume,PVC与Pod需要在同一个命名空间下,其实Pod的声明如下:

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: dockerfile/nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:    # 使用PVC
        claimName: myclaim


PersistentVolumes

绑定是唯一的,并且由于

PersistentVolumeClaims

是命名空间对象,因此只能在一个命名空间内挂载具有“多个”模式(

ROX



RWX

)的PVC。

参考文章:



版权声明:本文为huwh_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。