Kubernetes:使用NFS进行动态持久卷配置

Yud*_*udi 11 nfs docker kubernetes

我有多节点kubernetes设置.我正在尝试使用带有NFS卷插件的存储类动态分配持久卷.我找到了glusterfs,aws-ebs等的存储类示例.但是,我没有找到任何NFS示例.如果我只创建PV和PVC,那么NFS工作得很好(没有存储类).我试图通过引用其他插件为NFS编写存储类文件.请参考下面,

NFS的存储class.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  namespace: kube-system
  name: my-storage
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "true"
  labels:
    kubernetes.io/cluster-service: "true"

provisioner: kubernetes.io/nfs
parameters:
  path: /nfsfileshare
  server: <nfs-server-ip> 
Run Code Online (Sandbox Code Playgroud)

NFS-PV-claim.yaml

apiVersion: v1
metadata:
  name: demo-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: my-storage
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
Run Code Online (Sandbox Code Playgroud)

它没用.所以,我的问题是,我们可以为NFS编写存储类吗?它是否支持动态提供?

c-x*_*ger 5

截至 2020 年 8 月,以下是在 Kubernetes 上寻找 NFS 持久性的方式:

你可以

  • 直接将 NFS 卷放在 Pod 上:
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    nfs:
      path: /foo/bar
      server: wherever.dns
Run Code Online (Sandbox Code Playgroud)
  • 手动创建一个由 NFS 支持的 Persistent Volume,并使用 Persistent Volume Claim 挂载它(PV 规范如下所示):
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2
Run Code Online (Sandbox Code Playgroud)
  • 使用(废弃)NFS PV供应者external-storage。这是两年前最后一次更新,并已正式停产,祝你好运。通过这条路线,您可以创建一个如下所示的存储类来满足您的 NFS 服务器的 PVC。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: example-nfs
provisioner: example.com/nfs
mountOptions:
  - vers=4.1
Run Code Online (Sandbox Code Playgroud)
  • 显然,CSI 是未来,并且有一个 NFS CSI 驱动程序。然而,它还不支持动态配置,所以它并不是非常有用。
    • 更新(2020 年 12 月):master CSI 驱动程序的动态配置显然正在进行中(在 上,但尚未发布)。
  • 您也许可以external-storage用社区中的内容或您编写的内容替换的 NFS 配置程序。例如,在研究这个问题时,我偶然发现了某人在 GitHub 上编写的配置程序。这些供应商是否表现良好,是否安全,或者根本无法工作,我无法理解,但它们确实存在。


Osw*_*ann 1

目的StorageClass创建存储,例如从云提供商(或他们在 kubernetes 文档中称之为“Provisioner”)创建的存储。对于 NFS,您只想访问现有存储,不涉及创建。因此你不需要一个StorageClass. 请参考这篇博客

  • 如果您不想为每个 pvc 手动创建 nfs 文件夹怎么办?假设您有一个 statefullset,并且每个副本都有其 nfs pvc 例如 (8认同)