Kubernetes:使用NFS

时间:2017-04-08 14:33:46

标签: docker kubernetes nfs

我有多节点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> 

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

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

5 个答案:

答案 0 :(得分:2)

我正在考虑做同样的事情。我找到了https://github.com/kubernetes-incubator/external-storage/tree/master/nfs,我认为你是基于你的供应商吗?

我认为nfs提供程序需要在定义的路径下创建一个唯一的目录。我不确定如何做到这一点。

也许这对kubernetes repo的github问题更好。

答案 1 :(得分:2)

使用NFS进行动态存储配置不起作用,最好使用glusterfs。有一个很好的教程,在设置时修复了常见问题。 http://blog.lwolf.org/post/how-i-deployed-glusterfs-cluster-to-kubernetes/

答案 2 :(得分:2)

截至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
  • 手动创建由NFS支持的持久卷,并使用持久卷声明(如下所示的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
  • 使用external-storage中的NFS PV provisioner(现已弃用)。这是两年前的最新更新,已经正式停产,祝您好运。使用此路由,您可以创建一个存储类,例如以下一种,以从您的NFS服务器实现PVC。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: example-nfs
provisioner: example.com/nfs
mountOptions:
  - vers=4.1
  • 很明显,CSI是未来,there is a NFS CSI driver.但是,它还不支持动态配置,因此它并不是非常有用。
    • 更新(2020年12月):动态预配置显然已在CSI驱动程序上工作(在master上,但尚未发布)。
  • 您也许可以用社区中的内容或您编写的内容替换external-storage的NFS设置程序。在研究此问题时,例如,我偶然发现了a provisioner written by someone on GitHub,。这样的供应商执行得好还是具有与external-storage中已弃用的无替换供应商相同的功能,但我确实存在。

答案 3 :(得分:1)

StorageClass的目的是创建存储,例如来自云提供商(或#34; Provisioner&#34;他们在kubernetes文档中称之为)。对于NFS,您只希望访问到现有存储,并且不涉及创建。因此,您不需要StorageClass。请参阅此blog

答案 4 :(得分:0)

我还尝试在kubernetes群集上启用NFS设置程序,起初它不起作用,因为快速入门指南没有提到您也需要应用rbac.yaml(我打开了{{3} }来解决此问题。

如果我在群集上执行以下步骤,则nfs设置程序对我来说工作正常: PR

$ kubectl create -f deploy/kubernetes/deployment.yaml
$ kubectl create -f deploy/kubernetes/rbac.yaml
$ kubectl create -f deploy/kubernetes/class.yaml

然后,您应该能够像这样创建PVC:

$ kubectl create -f deploy/kubernetes/claim.yaml

您可能要更改deployment.yaml中用于卷挂载的文件夹,以使其与群集匹配。