【问题标题】:Does the Storage class need to be created in Kubernetes before referring them in PV/PVC?在 PV/PVC 中引用存储类之前,是否需要在 Kubernetes 中创建存储类?
【发布时间】:2021-09-23 06:41:44
【问题描述】:

我在 kubernetes 集群中有一个 PV alpha-pv,并创建了一个符合 PV 规范的 PVC。 PV 使用Storage Class: slow。但是,当我检查集群中存储类的存在时,不存在存储类,我的 PVC 仍然是 PV 的Bound

如果集群中不存在 PV/PVC 中引用的 Storage Class,这怎么可能?

如果我没有在 PVC 中提及存储类,我会收到错误消息,说明存储类集。集群中已经存在一个 PV,它具有 RWO 访问模式、1Gi 存储大小和名为 slow 的存储类。但是在查看存储类详细信息时,集群中没有存储类资源。

如果我在我的 PVC mysql-alpha-pvc 中添加存储类名称 slow,那么 PVC 将绑定到 PV。但我不清楚当集群中不存在名为 slow 的 PV/PVC 中引用的存储类时会发生这种情况。

【问题讨论】:

  • 这是一个裸机部署还是一些托管的 kubernetes 服务?谁是存储类的提供者?这将提供有关默认 storageClasses 的想法。
  • 是的,存储类应该存在,所以PersistentVolumeClaim 可以找到storageClass 并创建一个PersistentVolume。请运行此kubectl get storageclasses 以查看您是否有任何存储类。
  • 不,这是一个虚拟化环境。
  • 嗨@moonkotte,你可以看到我已经粘贴了命令的输出,集群中没有这样的存储类,PVC仍然绑定到Claim。我已经运行了该命令,但没有找到存储类。
  • @MayurKadam 你在学习任何类型的教程吗?您可以删除 PV 和 PVC 以及存储类。然后添加PVC,看看会发生什么(它不应该工作)。另外我可以看到你有两个有两个存储类:slowslow-storage。如果你没有在 PVC 中指定storageClassNamedefault one will be used

标签: kubernetes persistent-volumes kubernetes-pvc persistent-volume-claims


【解决方案1】:

简答

视情况而定。

理论

使用storageClass 的主要目的之一是dynamic provisioning。这意味着一旦持久卷声明请求存储,持久卷将自动配置:立即或在创建使用此PVC 的 pod 之后。见Volume binding mode

还有:

StorageClass 为管理员提供了一种描述 他们提供的“类别”存储。不同的类可能映射到 服务质量级别,或备份策略,或任意 由集群管理员确定的策略。 Kubernetes 本身 对类代表什么没有意见。这个概念是 在其他存储系统中有时称为“配置文件”。

Reference.

工作原理

例如,如果 kubernetes 用于云中(Google GKE、Azure AKS 或 AWS EKS),它们已经预定义了storageClasses,例如来自 Google GKE:

$ kubectl get storageclasses
NAME                 PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
premium-rwo          pd.csi.storage.gke.io   Delete          WaitForFirstConsumer   true                   27d
standard (default)   kubernetes.io/gce-pd    Delete          Immediate              true                   27d
standard-rwo         pd.csi.storage.gke.io   Delete          WaitForFirstConsumer   true                   27d

所以你可以创建PVC's并引用storageClassPV将为你创建。


您面临的另一种情况是您可以使用任何自定义storageClassName 创建PVCPV,仅用于绑定目的。通常它用于在本地测试某些东西。这也称为static provisioning

在这种情况下,您可以创建 kubernetes 服务器中不存在的“假”存储类。

请看an example with such type of binding:

它为 PersistentVolume 定义了 StorageClass 名称手册, 这将用于将 PersistentVolumeClaim 请求绑定到此 持久卷。

有用的链接:

【讨论】:

    【解决方案2】:

    您好,我已经面临同样的挑战,但已解决, 请确保:

    1. 您的 PVC 配置(RW 模式、大小、名称)与 PV 配置中的内容相匹配

    2. 您的 Deployment 中的声明名称等于您的 PVC

    3. 将您的部署扩展到 (0),然后扩展到 (1),您会发现它是 工作顺利

    4. 如果您遇到任何挑战,您可以运行 (kubectl get events) 以了解什么是阻止程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多