Kubernetes - PersitentVolume 与 StorageClass

Kubernetes - PersitentVolume 与 StorageClass

我有这个持久卷的例子这篇关于通过 kubernetes statefulset 的 postgresql 的文章

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pgdata
  labels:
    app: postgres
    type: local
spec:
  storageClassName: sc001
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/data"

这似乎可行,但在逻辑上存在问题。

  1. 据我所知你需要任何一个ApersistentVolume 或者astorageClass满足 a 的需求PersistentVolumeClaim。其中 aPV是静态的,而SC是动态的。我理解非此即彼是排他性的任何一个或者另一个,不是都(我认为这NOR与 相对OR)。
    所以我不明白 astorageClaseName在这里做什么。有人能帮我从逻辑上理解吗?

  2. 我相信type: localpath: "/var/data"意味着该卷存在于节点的本地文件系统中,并且其内容可以在/var/data该节点的目录中找到。如果我想使用其他东西
    ,我必须使用什么值type?例如由供应商提供的存储(在我的情况下是 csi.vsphere.vmware.com)?

答案1

希望我答对了问题。

persistentVolumeClaim 始终绑定到 persistentVolume,其思想是将声明连接到磁盘,这样无论 pod 部署到哪个节点,它都可以连接到同一个磁盘。

storageClass 是一种自动 persistentVolume 配置机制,这意味着如果您指定了 persistentVolumeClaim 并且配置了默认 storageClass,它将创建一个 persistentVolume 并将其附加到 persistentVolumeClaim。

您还可以手动创建一个 persistentVolume,它将附加到 persistentVolumeClaim(无论 storageClass 如何),但想象一下一个有数百个 pvc 的大型环境,并为每个 pv 维护一个 pv。

您还可以指定一个 pv 来连接 pvc。

type:local配置是节点上的本地卷,充当 pv。在您的例子中,vmware 会创建一个 vmdk 文件并将其复制到部署 pod 的节点上。

希望有所帮助。

答案2

Question: So I do not understand what a storageClaseName is doing in here. Can anybody help me out with the logical understanding?

storageClaseName 用于指定持久卷的类别。我将使用一个用例来解释。假设您想要在 3 个不同的类别中管理生产关键应用程序的存储。金牌、银牌和铜牌。金牌适用于生产级关键应用程序,其余适用于不太重要的应用程序。现在,您可以根据应用程序的风险级别轻松分配要为其分配的存储类型。例如,我想将金牌级存储用于我的视频流服务,那么我必须指定一个 PVC,并将 storageClassName 设置为金牌级。现在,kubernetes 将找到(如果可用)属于金牌类别的 PV 来满足此请求。如果存在一个大小足以容纳此 PVC,但不属于金牌级的 PV,那么该 PV 将不会用于满足此要求。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gold-class-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: gold-class-storage
  ....
Question: What value would I have to use for type whether I wanted to use something else?

请参考此链接: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes

相关内容