wake-up-neo.com

Kubernetes: Dynamisches persistentes Volume-Provisioning mit NFS

Ich habe Multi-Node-Kubernetes eingerichtet. Ich versuche, ein persistentes Volume mithilfe von Speicherklassen mit NFS-Volume-Plugin dynamisch zuzuweisen. Ich habe Beispiele für Speicherklassen für glusterfs, aws-ebs usw. gefunden. Ich habe jedoch kein Beispiel für NFS gefunden. Wenn ich nur PV und PVC erstelle, funktioniert NFS sehr gut (ohne Speicherklasse). Ich habe versucht, Speicherklassendateien für NFS zu schreiben, indem ich auf andere Plugins verwies. bitte verweisen Sie es unten,

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

Es hat nicht funktioniert. Meine Frage ist also: Können wir eine Speicherklasse für NFS schreiben? Unterstützt es dynamisches Provisioing?

9
Yudi

Ich suche das Gleiche. Ich habe https://github.com/kubernetes-incubator/external-storage/tree/master/nfs gefunden, auf dem ich glaube, dass Sie Ihren Provisioner darauf bezogen haben?

Ich denke, ein NFS-Provider müsste unter dem definierten Pfad ein eindeutiges Verzeichnis erstellen. Ich bin mir nicht wirklich sicher, wie das gemacht werden könnte.

Vielleicht ist das besser als Github-Problem im kubernetes Repo.

2
xeor

Dynamische Speicherbereitstellung mit NFS funktioniert nicht. Verwenden Sie besser Glusterfs. Es gibt ein gutes Tutorial mit behobenen Problemen beim Einrichten . http://blog.lwolf.org/post/how-i-deployed-glusterfs-cluster-to-kubernetes/

2
karthik101

Der Zweck von StorageClass ist der create -Speicher, z. von Cloud-Providern (oder "Provisioner", wie sie in den kubernetes-Dokumenten genannt werden). Im Falle von NFS möchten Sie nur access auf den vorhandenen Speicher zugreifen, und es ist keine Erstellung erforderlich. Sie benötigen also keine StorageClass. Bitte beziehen Sie sich auf diesen Blog .

1

Sie können pv, pvc wie unten gezeigt direkt erstellen. Dies ist ein Beispiel für PV und PVC für die private Registrierung. Es sollte für die meisten Apps funktionieren. Stellen Sie sicher, dass Sie den nfs-Server installieren und die Mount-Einträge im Verzeichnis/etc/exports des nfs-Servers für den Zugriff konfigurieren.

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 erstellen, PV -

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

Nach der Erstellung sollte der pv an den pvc gebunden sein -

enter image description here

0
karthik101

Ich habe auch versucht, den NFS-Provisioner in meinem Kubernetes-Cluster zu aktivieren, und es funktionierte zunächst nicht, da in der Schnellstartanleitung nicht erwähnt wird, dass Sie auch die Datei rbac.yaml anwenden müssen (ich habe ein PR um dies zu beheben).

Der nfs-Provisioner funktioniert für mich gut, wenn ich die folgenden Schritte in meinem Cluster befolge: 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

Dann sollten Sie PVCs so erstellen können:

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

Möglicherweise möchten Sie die Ordner ändern, die für die Volume-Mounts in deployment.yaml verwendet werden, um sie mit Ihrem Cluster abzugleichen.

0