在这篇文章中,我们将向你展示如何在 Kubernetes(k8s)集群中设置动态 NFS 配置。
Kubernetes 中的动态 NFS 存储配置允许你按需自动为 Kubernetes 应用配置和管理 NFS(网络文件系统)卷。它允许创建持久卷(PV)和持久卷声明(PVC),而无需手动干预或预配置存储。
NFS 配置程序负责动态创建 PV 并将其绑定到 PVC。它与 NFS 服务器交互,为每个 PVC 创建目录或卷。
先决条件
- 预装 Kubernetes 集群
- 具有 Kubernetes 集群管理员权限的普通用户
- 互联网连接
事不宜迟,让我们深入探讨步骤:
步骤 1、准备 NFS 服务器
就我而言,我将在 Kubernetes 主节点(Ubuntu 22.04)上安装 NFS 服务器。登录主节点并运行以下命令:
1 2 3
| $ sudo apt update $ sudo apt install nfs-kernel-server -y
|
创建以下文件夹并使用 NFS 共享它:
1 2 3 4
| $ sudo mkdir /opt/dynamic-storage $ sudo chown -R nobody:nogroup /opt/dynamic-storage $ sudo chmod 777 /opt/dynamic-storage
|
在 /etc/exports
文件中添加以下条目:
1 2 3
| $ sudo vi /etc/exports /opt/dynamic-storage 192.168.1.0/24(rw,sync,no_subtree_check)
|
保存并关闭文件。
注意:不要忘记更改导出文件中适合你的部署的网络。
要使上述更改生效,请运行:
1 2 3 4
| $ sudo exportfs -a $ sudo systemctl restart nfs-kernel-server $ sudo systemctl status nfs-kernel-server
|
在工作节点上,使用以下 apt
命令安装 nfs-common
包。
1 2
| $ sudo apt install nfs-common -y
|
步骤 2、安装和配置 NFS 客户端配置程序
NFS 子目录外部配置程序在 Kubernetes 集群中部署 NFS 客户端配置程序。配置程序负责动态创建和管理由 NFS 存储支持的持久卷(PV)和持久卷声明(PVC)。
因此,要安装 NFS 子目录外部配置程序,首先使用以下命令集安装 helm
:
1 2 3 4
| $ 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
|
运行以下命令来启用 helm
仓库:
1 2
| $ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
|
使用以下 helm
命令部署配置程序:
1 2
| $ 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
命令将自动创建 nfs-provisioning
命名空间,并安装 NFS 配置程序的容器荚/部署、名称为 nfs-client
的存储类,并将创建所需的 rbac。
1 2 3
| $ kubectl get all -n nfs-provisioning $ kubectl get sc -n nfs-provisioning
|
完美,上面的输出确认了配置程序容器荚和存储类已成功创建。
步骤 3、创建持久卷声明(PVC)
让我们创建 PVC 来为你的容器荚或部署请求存储。PVC 将从存储类 nfs-client
请求特定数量的存储:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ 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
|
保存并关闭文件。
运行以下 kubectl
命令以使用上面创建的 YML 文件创建 PVC:
1 2
| $ kubectl create -f demo-pvc.yml
|
验证 PVC 和 PV 是否创建:
1 2
| $ kubectl get pv,pvc -n nfs-provisioning
|
太好了,上面的输出表明 PV 和 PVC 创建成功。
步骤 4、测试并验证动态 NFS 配置
为了测试和验证动态 NFS 配置,请使用以下 YML 文件启动测试容器荚:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| $ 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
|
使用以下 kubectl
命令部署容器荚:
1 2
| $ kubectl create -f test-pod.yml
|
验证 test-pod
的状态:
1 2
| $ kubectl get pods -n nfs-provisioning
|
登录到容器荚并验证 NFS 卷是否已安装。
1 2
| $ kubectl exec -it test-pod -n nfs-provisioning /bin/sh
|
太棒了,上面容器荚的输出确认了动态 NFS 卷已安装且可访问。
最后删除容器荚和 PVC,查看 PV 是否自动删除。
1 2 3 4
| $ kubectl delete -f test-pod.yml $ kubectl delete -f demo-pvc.yml $ kubectl get pv,pvc -n nfs-provisioning
|
这就是这篇文章的全部内容,希望对你有所帮助。请随时在下面的评论部分发表你的疑问和反馈。
(题图:MJ/75dae36f-ff68-4c63-81e8-281e2c239356)
via: https://www.linuxtechi.com/dynamic-nfs-provisioning-kubernetes/
作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出