我需要为不同的PV创建不同的StorageClass吗?

问题描述 投票:0回答:1

我有一个 NAS (TrueNAS/FreeNAS),我想通过它向我的 Kubernetes 集群提供持久卷。

我正在使用 SMB 共享来共享目录。共享将有不同的用户具有不同的权限(主要是只读与读写)。

然后,我将使用不同的访问模式和相应的凭据创建多个持久卷(以及 PVC,因为它们是一对一的)。这是为了确保服务根据其使用情况对目录的访问受到限制。

目前,SMB 为我提供了良好的性能,并且让我可以通过设置用户及其 ACL 来配置对其不同目录的访问。

目前,我正在使用 K3S 来设置 Kubernetes 集群。

我在网上查找并发现了两个 csi 驱动程序实现可以帮助我做到这一点,即 csi-driver-smbdemocratic-csi

但是,在

StorageClass
thisthat 的两种配置中,都要求提供用户名和密码以及存储类本身中的 smb 共享端点。存储类是否应该包含存储本身的凭据?我假设它将定义如何连接到 SMB 存储,并且 PV 将提供必要的凭据来执行此操作。它似乎还要求存储类中的 smb 共享端点。

我对存储类的定义是错误的吗

对于我的用例,我需要配置对同一 smb 目录具有不同权限的两个访问权限,我需要创建两个存储类吗

另外,如果我需要连接到通过 SMB 共享的另一个目录,我是否需要再次创建新的存储类?

kubernetes smb container-storage-interface
1个回答
0
投票

是的。您绝对应该为需要不同配置的不同 PV 创建不同的存储类。我使用许多 CSI,包括提到的 csi-driver-smb。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: smb-q2-default
  labels:
    app.kubernetes.io/managed-by: Helm
  annotations:
    meta.helm.sh/release-name: csi-driver-smb-q2
    meta.helm.sh/release-namespace: csi-driver-smb-q2
provisioner: smbq2.csi.k8s.io
reclaimPolicy: Retain
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - vers=3.0
allowVolumeExpansion: false
volumeBindingMode: Immediate

您能否将 PV 分组为具有常见保留、扩展和安装选项的集合?为每个人创建一个存储类。

您问了另一个关于在哪里定义凭证的问题 - 这是依赖于 CSI 的,但通常非常灵活。例如,csi-driver-smb,您可以为每个 PV 设置凭据,如下所示:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example
spec:
  capacity:
    storage: 1Gi
  csi:
    driver: smbq2.csi.k8s.io
    volumeHandle: globally-unique-id
    fsType: ext4
    volumeAttributes:
      createSubDir: 'true'
      source: \\unc.server.path\config\example
    nodeStageSecretRef:
      name: example-smb-secret
      namespace: csi-smb-q2
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: smb-default
  volumeMode: Filesystem

SMB 凭证/秘密的格式可能会因操作系统、域等而异。您会弄清楚的。

此外,值得一提的是 - 在最近的 k8s 版本中 - 如果您有一个不引用 storageClass 的现有 PV,则可以就地修补它,一次,无需重新创建。

© www.soinside.com 2019 - 2024. All rights reserved.