在Kubernetes环境中NFSNetwork File System因其跨节点共享存储的特性被广泛应用于有状态应用的持久化存储需求。本文介绍K8s集群配置基于 NFS 的动态存储供应方案。一、安装helm1、Helm提供了一个安装脚本能够自动获取最新的helm并且安装至本地在master节点执行代码curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 get_helm.sh sh get_helm.sh2、验证如下图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-server2、在其他节点安装NFS客户端sudo yum install -y nfs-utils3、在其他节点上验证共享可用性根据实际修改以下master节点IPsudo showmount -e {master节点IP}三、创建StorageClass使用NFS provisioner1、下载NFS provisioner的 Chart 包这里我本地下载Chart包是4.0.2版本并上传master服务器root目录下。nfs-subdir-external-provisioner-4.0.2.tgz 下载链接https://pan.quark.cn/s/90601d23bdbb2、下载 NFS provisioner镜像由于无法直接pull NFS provisioner镜像nfs-subdir-external-provisioner-4.0.2.tar 镜像下载链接https://pan.quark.cn/s/51e19cb3be6d3、将NFS provisioner镜像导入本地镜像库将下载的nfs-subdir-external-provisionerv402.tar上传所有工作节点并加载到本地镜像库执行代码docker load -i nfs-subdir-external-provisionerv402.tar4、为新镜像打标签和版本#查看新加载镜像的id docker images #所有节点给镜像打上标签和版本(根据实际修改镜像id) docker tag {镜像id} registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.25、在master节点root目录下执行代码根据实际修改以下master节点IPhelm install nfs-subdir-external-provisioner ./nfs-subdir-external-provisioner-4.0.2.tgz \ --namespace kube-system \ --set image.repositoryregistry.k8s.io/sig-storage/nfs-subdir-external-provisioner \ --set image.tagv4.0.2 \ --set nfs.server{master节点IP} \ --set nfs.path/data/nfs6、验证执行代码kubectl get pods --namespace kube-system | grep nfs如下图pod状态为Running即部署成功