繁体   English   中英

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

[英]Kubernetes : Dynamic Persistent Volume provisioning using NFS

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

nfs-storage-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 编写一个存储类吗? 它是否支持动态配置?

截至 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 支持的 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
  • 使用external-storage的(现已弃用) 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
  • 显然,CSI 是未来,并且有一个 NFS CSI 驱动程序。 然而,它还不支持动态配置,所以它并不是非常有用。
    • 更新(2020 年 12 月): CSI 驱动程序的动态配置显然正在进行中(在master ,但尚未发布)。
  • 您也许可以用社区中的内容或您编写的内容替换external-storage的 NFS 配置程序。 例如,在研究这个问题时,我偶然发现了某人在 GitHub 上编写的配置程序 这些供应商是否表现良好,是否安全,或者根本无法工作,我无法理解,但它们确实存在。

我正在考虑做同样的事情。 我找到了https://github.com/kubernetes-incubator/external-storage/tree/master/nfs ,我认为您的配置器基于它?

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

也许这作为 kubernetes 存储库上的 github 问题更好。

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

我还尝试在我的 kubernetes 集群上启用 NFS 配置器,但起初它不起作用,因为快速入门指南没有提到您还需要应用 rbac.yaml(我打开了一个PR来解决这个问题)。

如果我在集群上遵循以下步骤,nfs 配置程序对我来说很好用: https : //github.com/kubernetes-incubator/external-storage/tree/master/nfs#quickstart

$ 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用于卷挂载的文件夹,以使其与您的集群相匹配。

StorageClass的目的是创建存储,例如从云提供商(或在 kubernetes 文档中称之为“供应商”)。 在 NFS 的情况下,您只想访问现有存储,不涉及创建。 因此您不需要StorageClass 请参阅此博客

您可以直接创建如下所示的pv,pvc。 这是私有注册表的PV和PVC示例,它应该适用于大多数应用程序。 确保安装nfs服务器并在nfs服务器的/ etc / exports中配置安装条目以进行访问。

example:
/mnt/disks/vol1 <IP ADDRESS OF THE NODE>(rw,sync,no_root_squash,no_all_squash)

registry-pv.yml -

apiVersion: v1
kind: PersistentVolume
metadata:
  name: registry-pv
  namespace: kube-system
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  nfs:
    path: /mnt/disks/vol1
    server: <IP-Address of NFS SERVER>
  persistentVolumeReclaimPolicy: Retain
  storageClassName: registry-storage

registry-pvc.yml -

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: registry-pvc
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: registry-storage
  volumeName: registry-pv
  resources:
    requests:
      storage: 50Gi

创建pvc,pv -

kubectl create -f registry-pv.yml 
kubectl create -f registry-pvc.yml

一旦创建,你应该看到pv绑定到pvc -

在此输入图像描述

如果您使用的是 AWS,我相信您可以使用此映像来创建 NFS 服务器:

https://hub.docker.com/r/alphayax/docker-volume-nfs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM