在Kubernetes环境中,NFS(Network File System)因其跨节点共享存储的特性,被广泛应用于有状态应用的持久化存储需求。本文介绍K8s集群配置基于 NFS 的动态存储供应方案。

一、安装helm

1、Helm提供了一个安装脚本,能够自动获取最新的helm并且安装至本地,在master节点执行代码:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
sh get_helm.sh

2、验证,如下图

helm version

二、安装nfs服务

1、NFS服务端可选K8S集群内任一node节点,或集群外同网段的独立服务器。本文在master上部署NFS服务端,master上执行代码:

sudo yum install -y nfs-utils

#创建共享目录,生产环境建议data目录单独挂载磁盘
sudo mkdir -p /data/nfs
sudo chmod 777 /data/nfs

#将目录写入 /etc/exports 文件
sudo tee /etc/exports <<-'EOF'
/data/nfs *(rw,sync,no_root_squash,no_all_squash)
EOF
sudo exportfs -r

#启动nfs服务和设置开机启动
sudo systemctl enable --now nfs-server

2、在其他节点安装NFS客户端

sudo yum install -y nfs-utils

3、在其他节点上,验证共享可用性(根据实际修改以下master节点IP)

sudo showmount -e {master节点IP}

三、创建StorageClass(使用NFS provisioner)

1、下载NFS provisioner的 Chart 包

这里我本地下载Chart包是4.0.2版本,并上传master服务器root目录下。

nfs-subdir-external-provisioner-4.0.2.tgz 下载链接:https://pan.quark.cn/s/90601d23bdbb

2、下载 NFS provisioner镜像

由于无法直接pull NFS provisioner镜像,nfs-subdir-external-provisioner-4.0.2.tar 镜像下载链接:https://pan.quark.cn/s/51e19cb3be6d

3、将NFS provisioner镜像导入本地镜像库

将下载的nfs-subdir-external-provisionerv402.tar上传所有工作节点,并加载到本地镜像库,执行代码:

docker load -i nfs-subdir-external-provisionerv402.tar

4、为新镜像打标签和版本

#查看新加载镜像的id
docker images

#所有节点给镜像打上标签和版本(根据实际修改镜像id)
docker tag  {镜像id} registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

5、在master节点root目录下执行代码(根据实际修改以下master节点IP)

helm install nfs-subdir-external-provisioner ./nfs-subdir-external-provisioner-4.0.2.tgz \
    --namespace kube-system \
    --set image.repository=registry.k8s.io/sig-storage/nfs-subdir-external-provisioner \
    --set image.tag=v4.0.2 \
    --set nfs.server={master节点IP} \
    --set nfs.path=/data/nfs

6、验证

执行代码:

kubectl get pods --namespace kube-system | grep nfs

如下图,pod状态为Running即部署成功

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐