我有一个 NAS (TrueNAS/FreeNAS),我想通过它向我的 Kubernetes 集群提供持久卷。
我正在使用 SMB 共享来共享目录。共享将有不同的用户具有不同的权限(主要是只读与读写)。
然后,我将使用不同的访问模式和相应的凭据创建多个持久卷(以及 PVC,因为它们是一对一的)。这是为了确保服务根据其使用情况对目录的访问受到限制。
目前,SMB 为我提供了良好的性能,并且让我可以通过设置用户及其 ACL 来配置对其不同目录的访问。
目前,我正在使用 K3S 来设置 Kubernetes 集群。
我在网上查找并发现了两个 csi 驱动程序实现可以帮助我做到这一点,即 csi-driver-smb 和 democratic-csi。
但是,在
StorageClass
this 和 that 的两种配置中,都要求提供用户名和密码以及存储类本身中的 smb 共享端点。存储类是否应该包含存储本身的凭据?我假设它将定义如何连接到 SMB 存储,并且 PV 将提供必要的凭据来执行此操作。它似乎还要求存储类中的 smb 共享端点。
我对存储类的定义是错误的吗?
对于我的用例,我需要配置对同一 smb 目录具有不同权限的两个访问权限,我需要创建两个存储类吗?
另外,如果我需要连接到通过 SMB 共享的另一个目录,我是否需要再次创建新的存储类?
是的。您绝对应该为需要不同配置的不同 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,则可以就地修补它,一次,无需重新创建。