在k8s中,我们能否仅通过PVC(而不使用PV)获取持久化存储卷?

6
我刚刚看到了一个Postgres的yaml文件,其中包括了PersistentVolumeClaimvolumeMounts以及volumes,并且在postgres容器中的persistentVolumeClaim。我没有找到任何已定义的PersistentVolume

然而,当postgres容器pod启动后,我可以看到一个PersistentVolume与yaml文件中定义的persistentVolumeClaim绑定。
那么如果我们只定义了PersistentVolumeClaim,k8s会创建PersistentVolume吗?
2个回答

11
是的,当你的集群具有storage-classes的动态供应时,只需要提供PVC,供应程序将从PVC和storageClass获取相关信息,然后根据这些信息创建PV。
PV的供应是动态进行的。当管理员创建的静态PV都不匹配用户的PersistentVolumeClaim时,集群可能会尝试为PVC特别提供卷。这种供应基于StorageClasses:PVC必须请求存储类,并且管理员必须已经创建和配置了该类才能进行动态供应。 dynamic-provisining 例如,在此处提供以下PVC信息:
  1. StorageClassName

  2. Requested Storage size

  3. AccessModes

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

在StorageClass中,您需要提供以下信息:

  1. Provisioner(存储提供者)

  2. 其他信息

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: manual
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
volumeBindingMode: Immediate
  • PVC是一个命名空间作用域的Kubernetes对象,但storageclass是集群作用域的K8s对象。因此,在您的集群中始终存在默认的storageclass。因此,当您不在PVC中指定storgaeclass的名称时,PV将从默认的storageclass中进行配置。

kubectl get sc,pvc,pv将提供相关信息


10

实际上,它已经被完成了:

动态分配持久卷。

PersistentVolumesPersistentVolumeClaims使得获取持久存储变得轻松,而无需开发人员处理底层使用的实际存储技术。但这仍然需要集群管理员提前进行分配实际存储。你认为必须创建PersistentVolumes,但并不总是如此。幸运的是,Kubernetes也可以通过动态分配持久卷自动执行这项工作。

集群管理员可以部署一个PersistentVolume provisioner,而不是创建PersistentVolumes,并定义一个或多个StorageClass对象,让用户选择他们想要的PersistentVolume类型。用户可以在其PersistentVolumeClaims中引用StorageClass,当分配持久存储时,provisioner将考虑到这一点。

Kubernetes通过包含默认的StorageClass定义来简化该过程。您不必像以下yaml清单中那样指定StorageClass:

PVC yaml文件:

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata:   
  name: postgresdb-pvc  
spec:   
  resources:
    requests:
      storage: 1Gi   
   accessModes:
    - ReadWriteOnce

这个 PVC 定义仅包括存储大小请求和期望的访问模式,但没有存储类。当您创建 PVC 时,将使用标记为默认的任何存储类。

$ kubectl get pvc postgresdb-pvc

NAME            STATUS   VOLUME         CAPACITY   ACCESSMODES   STORAGECLASS
postgresdb-pvc  Bound    pvc-95a5ec12   1Gi        RWO           standard

$ kubectl get pv pvc-95a5ec12

NAME           CAPACITY  ACCESSMODES  RECLAIMPOLICY  STATUS    STORAGECLASS    
pvc-95a5ec12   1Gi       RWO          Delete         Bound     standard

这张图片来自《Kubernetes实战》这本书,完美地总结了所有步骤。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接