簡體   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