如何在 Kubernetes 集群中设置动态 NFS 配置

系统
在这篇文章中,我们将向你展示如何在 Kubernetes(k8s)集群中设置动态 NFS 配置。

Kubernetes 中的动态 NFS 存储配置允许你按需自动为 Kubernetes 应用配置和管理 NFS(网络文件系统)卷。它允许创建持久卷(PV)和持久卷声明(PVC),而无需手动干预或预配置存储。

NFS 配置程序负责动态创建 PV 并将其绑定到 PVC。它与 NFS 服务器交互,为每个 PVC 创建目录或卷。

先决条件

  • 预装 Kubernetes 集群
  • 具有 Kubernetes 集群管理员权限的普通用户
  • 互联网连接

事不宜迟,让我们深入探讨步骤:

步骤 1、准备 NFS 服务器

就我而言,我将在 Kubernetes 主节点(Ubuntu 22.04)上安装 NFS 服务器。登录主节点并运行以下命令:

$ sudo apt update
$ sudo apt install nfs-kernel-server -y

创建以下文件夹并使用 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)

保存并关闭文件。

注意:不要忘记更改导出文件中适合你的部署的网络。

要使上述更改生效,请运行:

$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server
$ sudo systemctl status nfs-kernel-server

NFS-Service-Status-Kubernetes-Master-UbuntuNFS-Service-Status-Kubernetes-Master-Ubuntu

NFS-Service-Status-Kubernetes-Master-Ubuntu

在工作节点上,使用以下 apt 命令安装 nfs-common 包。

$ sudo apt install nfs-common -y

步骤 2、安装和配置 NFS 客户端配置程序

NFS 子目录外部配置程序在 Kubernetes 集群中部署 NFS 客户端配置程序。配置程序负责动态创建和管理由 NFS 存储支持的持久卷(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

运行以下命令来启用 helm 仓库:

$ 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-clusterhelm-install-nfs-provisioning-kubernetes-cluster

helm-install-nfs-provisioning-kubernetes-cluster

上面的 helm 命令将自动创建 nfs-provisioning 命名空间,并安装 NFS 配置程序的容器荚/部署、名称为 nfs-client 的存储类,并将创建所需的 rbac。

$ kubectl get all -n nfs-provisioning
$ kubectl get sc -n nfs-provisioning

kubectl-get-all-nfs-provisioning-kubernetes-clusterkubectl-get-all-nfs-provisioning-kubernetes-cluster

kubectl-get-all-nfs-provisioning-kubernetes-cluster

完美,上面的输出确认了配置程序容器荚和存储类已成功创建。

步骤 3、创建持久卷声明(PVC)

让我们创建 PVC 来为你的容器荚或部署请求存储。PVC 将从存储类 nfs-client 请求特定数量的存储:

$ 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

保存并关闭文件。

PVC-Yaml-Dynamic-NFS-KubernetesPVC-Yaml-Dynamic-NFS-Kubernetes

PVC-Yaml-Dynamic-NFS-Kubernetes

运行以下 kubectl 命令以使用上面创建的 YML 文件创建 PVC:

$ kubectl create -f demo-pvc.yml

验证 PVC 和 PV 是否创建:

$ kubectl get pv,pvc -n nfs-provisioning

Verify-pv-pvc-dynamic-nfs-kubernetes-clusterVerify-pv-pvc-dynamic-nfs-kubernetes-cluster

Verify-pv-pvc-dynamic-nfs-kubernetes-cluster

太好了,上面的输出表明 PV 和 PVC 创建成功。

步骤 4、测试并验证动态 NFS 配置

为了测试和验证动态 NFS 配置,请使用以下 YML 文件启动测试容器荚:

$ 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-kubernetesPod-Yml-Dynamic-NFS-kubernetes

Pod-Yml-Dynamic-NFS-kubernetes

使用以下 kubectl 命令部署容器荚:

$ kubectl create -f test-pod.yml

验证 test-pod 的状态:

$ kubectl get pods -n nfs-provisioning

Verify-Test-Pod-Using-NFS-Volume-KubernetesVerify-Test-Pod-Using-NFS-Volume-Kubernetes

Verify-Test-Pod-Using-NFS-Volume-Kubernetes

登录到容器荚并验证 NFS 卷是否已安装。

$ kubectl exec -it test-pod -n nfs-provisioning /bin/sh

Access-Dynamic-NFS-Inside-Pod-KubernetesAccess-Dynamic-NFS-Inside-Pod-Kubernetes

Access-Dynamic-NFS-Inside-Pod-Kubernetes

太棒了,上面容器荚的输出确认了动态 NFS 卷已安装且可访问。

最后删除容器荚和 PVC,查看 PV 是否自动删除。

$ kubectl delete -f test-pod.yml
$ kubectl delete -f demo-pvc.yml
$ kubectl get pv,pvc -n  nfs-provisioning

Delete-Pod-PVC-Dynamic-NFSDelete-Pod-PVC-Dynamic-NFS

责任编辑:赵宁宁 来源: Linux中国
相关推荐

2019-07-12 16:28:32

MacKubernetes

2024-07-22 15:49:07

KubernetesRedis

2023-06-25 18:53:03

2012-12-31 10:54:09

LinuxNFS

2014-06-30 09:27:17

UbuntuTomcat集群

2020-07-13 07:00:21

Kubernetes

2020-07-20 07:00:00

KubernetesHostPath

2011-07-13 15:32:38

ODBC数据库驱动程序系统DSN

2010-06-01 10:42:59

动态VDI

2022-06-27 05:48:24

Kubernetes容器

2019-07-30 10:33:01

2022-03-07 10:41:09

云计算容器Kubernetes

2023-03-08 09:27:51

LVSsession

2010-08-05 14:50:42

AIX NFS

2021-11-11 09:01:01

Helm Chart Kubernetes

2021-12-02 08:00:00

Kubernetes集群容器

2010-08-05 11:21:58

NFS共享

2018-03-29 15:21:03

LinuxDebian网桥

2019-07-04 13:10:53

Docker设计云计算

2024-07-30 08:00:00

Kubernetes数据库
点赞
收藏

51CTO技术栈公众号