3

我刚刚在容器中看到了一个用于 Postgres 的 yaml 文件,其中包含PersistentVolumeClaim和。我找不到任何定义。volumeMountsvolumespersistentVolumeClaimpostgresPersistentVolume

但是,当postgres容器 pod 启动时,我可以看到 yaml 文件PersistentVolume中定义的绑定。persistentVolumeClaim

PersistentVolume如果我们只定义 ,k8s 会创建PersistentVolumeClaim吗?

4

2 回答 2

8

是的,这是正确的,因此当您的集群具有 存储类的动态配置时,您只需要提供PVC,配置器将从 PVC 和 storageClass 获取相关信息,然后根据这些信息创建 PV。

  • PV 的供应是动态发生的

    当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,集群可能会尝试为 PVC 动态配置卷。此供应基于 StorageClasses:PVC 必须请求一个存储类,并且管理员必须创建并配置该类才能进行动态供应。 动态配置

例如,您在 PVC 中提供以下信息

  1. 存储类名

  2. 请求的存储大小

  3. 访问模式

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

在 StorageClass 中,您提供以下信息

  1. 供应商

  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 对象,但存储类在集群范围的 k8s 对象中。所以在你的集群中总是有一个默认的存储类。所以当你没有在你的 pvc 中指定存储类的名称时,PV 将从默认的存储类中提供。

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

于 2019-06-04T19:55:56.900 回答
4

实际上,它已经由

PersistentVolumes 的动态配置

PersistentVolumesPersistentVolumeClaims可以轻松获得持久存储,而无需开发人员处理底层使用的实际存储技术。但这仍然需要集群管理员预先配置 实际存储。您认为,必须创建PersistentVolume,但不必一直这样。幸运的是,Kubernetes 还可以通过动态配置 PersistentVolume 自动执行这项工作。

集群管理员无需创建 PersistentVolume,而是可以部署PersistentVolume 配置器并定义一个或多个StorageClass对象,让用户选择他们想要的PersistentVolume类型。用户可以在他们的 PersistentVolumeClaims中引用StorageClass ,供应商 在供应持久存储时会考虑到这一点。

kubernetes 通过包含默认的StoregeClass定义使其变得更简单。您不必在 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 In Action这本书,完美地总结了所有步骤。

在此处输入图像描述

于 2020-02-22T11:32:16.247 回答