我可以 link 通过标签或选择器而不是名称将 K8s 部署到 PVC 吗?

Can I link a K8s deployment to PVCs by label or selector instead of name?

我在 Kubernetes 中有一个部署。在此部署中,我可以按如下方式指定持久卷声明:

  volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-claim

我有一个包含大量预处理数据的磁盘(准确地说是 Azure 磁盘),我可以在 Kubernetes 中将其公开为名称为 my-claim 的 PVC。在下一步中,我 link 将其部署到如上所示。这种方法的问题是,我无法将部署扩展到多个 pod。

如何扩展此设置?我试图复制磁盘并将其创建为具有不同名称的第二个 PVC。这行得通,但现在我看不到告诉 Kubernetes 部署的方法,每个 pod 应该挂载这两个 PVC 之一。

我希望有一个选项可以用一个公共标签标记两个 PVC,然后 link 我的部署到这个标签而不是 PVC 名称。有这样的事情吗?还是我的方法完全错误?

谢谢!

I have a disk (an Azure disk to be precise) with lots of preprocessed data, which I can expose in Kubernetes as PVC with name my-claim. In the next step I link it to the deployment as shown above. The problem with this approach is, that I cannot scale the deployment to more than one pod.

在这里,您使用 PersistentVolumeClaimAccess Mode ReadWriteOnce(这是 Azure 磁盘的唯一选项,请参阅访问模式 link)

How can I scale this setup? I tried to duplicate the disk and create it as second PVC with a different name. This worked, but now I don't see a way to tell the Kubernetes deployment, that each pod should mount one of these two PVCs.

在这里,听起来您想要一个具有 访问模式的卷 ReadOnlyMany - 因此您需要考虑支持此 访问的存储系统模式.

I tried to duplicate the disk and create it as second PVC with a different name. This worked, but now I don't see a way to tell the Kubernetes deployment, that each pod should mount one of these two PVCs.

这不适用于 Deployment because the template for each pod is identical. But you can do this with StatefulSet,使用 volumeClaimTemplates 声明您的 PVC - 然后每个 pod 的 PVC 都具有 唯一的众所周知的身份 .

StatefulSet的示例部分:

  volumeClaimTemplates:
  - metadata:
      name: my-pvc
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

然后,如果您有两个 StatefulSet 副本,它们将为您提供一个名为 my-pvc-0my-pvc-1 的 PVC,其中数字称为“序号”。 volumeClaimTemplate 仅在不存在的情况下创建新的 PVC,因此如果您创建了具有正确名称的 PVC - 将使用现有的。

替代存储解决方案

Azure 磁盘的替代存储解决方案是 Azure 文件。 Azure 文件支持 访问模式 ReadWriteOnceReadOnlyManyReadWriteMany。参见 Dynamically create and use a persistent volume with Azure Files in Azure Kubernetes Service (AKS)

可能还有其他更适合您的应用程序的存储替代方案。