[英]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 持久性的方式:
你可以
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
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。
kubernetes-sigs/nfs-subdir-external-provisioner
! 它的工作方式似乎與舊的nfs-client
配置程序類似,但要最新得多。 哈扎!kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: example-nfs
provisioner: example.com/nfs
mountOptions:
- vers=4.1
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 服務器:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.