如何在 Kubernetes 集群中設(shè)置動(dòng)態(tài) NFS 配置
Kubernetes 中的動(dòng)態(tài) NFS 存儲(chǔ)配置允許你按需自動(dòng)為 Kubernetes 應(yīng)用配置和管理 NFS(網(wǎng)絡(luò)文件系統(tǒng))卷。它允許創(chuàng)建持久卷(PV)和持久卷聲明(PVC),而無(wú)需手動(dòng)干預(yù)或預(yù)配置存儲(chǔ)。
NFS 配置程序負(fù)責(zé)動(dòng)態(tài)創(chuàng)建 PV 并將其綁定到 PVC。它與 NFS 服務(wù)器交互,為每個(gè) PVC 創(chuàng)建目錄或卷。
先決條件
- 預(yù)裝 Kubernetes 集群
- 具有 Kubernetes 集群管理員權(quán)限的普通用戶(hù)
- 互聯(lián)網(wǎng)連接
事不宜遲,讓我們深入探討步驟:
步驟 1、準(zhǔn)備 NFS 服務(wù)器
就我而言,我將在 Kubernetes 主節(jié)點(diǎn)(Ubuntu 22.04)上安裝 NFS 服務(wù)器。登錄主節(jié)點(diǎn)并運(yùn)行以下命令:
$ sudo apt update
$ sudo apt install nfs-kernel-server -y
創(chuàng)建以下文件夾并使用 NFS 共享它:
$ sudo mkdir /opt/dynamic-storage
$ sudo chown -R nobody:nogroup /opt/dynamic-storage
$ sudo chmod 777 /opt/dynamic-storage
在 /etc/exports 文件中添加以下條目:
$ sudo vi /etc/exports
/opt/dynamic-storage 192.168.1.0/24(rw,sync,no_subtree_check)
保存并關(guān)閉文件。
注意:不要忘記更改導(dǎo)出文件中適合你的部署的網(wǎng)絡(luò)。
要使上述更改生效,請(qǐng)運(yùn)行:
$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server
$ sudo systemctl status nfs-kernel-server
NFS-Service-Status-Kubernetes-Master-Ubuntu
NFS-Service-Status-Kubernetes-Master-Ubuntu
在工作節(jié)點(diǎn)上,使用以下 apt 命令安裝 nfs-common 包。
$ sudo apt install nfs-common -y
步驟 2、安裝和配置 NFS 客戶(hù)端配置程序
NFS 子目錄外部配置程序在 Kubernetes 集群中部署 NFS 客戶(hù)端配置程序。配置程序負(fù)責(zé)動(dòng)態(tài)創(chuàng)建和管理由 NFS 存儲(chǔ)支持的持久卷(PV)和持久卷聲明(PVC)。
因此,要安裝 NFS 子目錄外部配置程序,首先使用以下命令集安裝 helm:
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
運(yùn)行以下命令來(lái)啟用 helm 倉(cāng)庫(kù):
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
使用以下 helm 命令部署配置程序:
$ helm install -n nfs-provisioning --create-namespace nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=192.168.1.139 --set nfs.path=/opt/dynamic-storage
helm-install-nfs-provisioning-kubernetes-cluster
helm-install-nfs-provisioning-kubernetes-cluster
上面的 helm 命令將自動(dòng)創(chuàng)建 nfs-provisioning 命名空間,并安裝 NFS 配置程序的容器莢/部署、名稱(chēng)為 nfs-client 的存儲(chǔ)類(lèi),并將創(chuàng)建所需的 rbac。
$ kubectl get all -n nfs-provisioning
$ kubectl get sc -n nfs-provisioning
kubectl-get-all-nfs-provisioning-kubernetes-cluster
kubectl-get-all-nfs-provisioning-kubernetes-cluster
完美,上面的輸出確認(rèn)了配置程序容器莢和存儲(chǔ)類(lèi)已成功創(chuàng)建。
步驟 3、創(chuàng)建持久卷聲明(PVC)
讓我們創(chuàng)建 PVC 來(lái)為你的容器莢或部署請(qǐng)求存儲(chǔ)。PVC 將從存儲(chǔ)類(lèi) nfs-client 請(qǐng)求特定數(shù)量的存儲(chǔ):
$ vi demo-pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: demo-claim
namespace: nfs-provisioning
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
保存并關(guān)閉文件。
PVC-Yaml-Dynamic-NFS-Kubernetes
PVC-Yaml-Dynamic-NFS-Kubernetes
運(yùn)行以下 kubectl 命令以使用上面創(chuàng)建的 YML 文件創(chuàng)建 PVC:
$ kubectl create -f demo-pvc.yml
驗(yàn)證 PVC 和 PV 是否創(chuàng)建:
$ kubectl get pv,pvc -n nfs-provisioning
Verify-pv-pvc-dynamic-nfs-kubernetes-cluster
Verify-pv-pvc-dynamic-nfs-kubernetes-cluster
太好了,上面的輸出表明 PV 和 PVC 創(chuàng)建成功。
步驟 4、測(cè)試并驗(yàn)證動(dòng)態(tài) NFS 配置
為了測(cè)試和驗(yàn)證動(dòng)態(tài) NFS 配置,請(qǐng)使用以下 YML 文件啟動(dòng)測(cè)試容器莢:
$ vi test-pod.yml
kind: Pod
apiVersion: v1
metadata:
name: test-pod
namespace: nfs-provisioning
spec:
containers:
- name: test-pod
image: busybox:latest
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && sleep 600"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: demo-claim
Pod-Yml-Dynamic-NFS-kubernetes
Pod-Yml-Dynamic-NFS-kubernetes
使用以下 kubectl 命令部署容器莢:
$ kubectl create -f test-pod.yml
驗(yàn)證 test-pod 的狀態(tài):
$ kubectl get pods -n nfs-provisioning
Verify-Test-Pod-Using-NFS-Volume-Kubernetes
Verify-Test-Pod-Using-NFS-Volume-Kubernetes
登錄到容器莢并驗(yàn)證 NFS 卷是否已安裝。
$ kubectl exec -it test-pod -n nfs-provisioning /bin/sh
Access-Dynamic-NFS-Inside-Pod-Kubernetes
Access-Dynamic-NFS-Inside-Pod-Kubernetes
太棒了,上面容器莢的輸出確認(rèn)了動(dòng)態(tài) NFS 卷已安裝且可訪問(wèn)。
最后刪除容器莢和 PVC,查看 PV 是否自動(dòng)刪除。
$ kubectl delete -f test-pod.yml
$ kubectl delete -f demo-pvc.yml
$ kubectl get pv,pvc -n nfs-provisioning
Delete-Pod-PVC-Dynamic-NFS