Kubernetes cluster中,配置NFS时常常遇到目录无权限,或者无法申请pv的情况,下面记录原因及解决方案:

以下所有都是使用

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

对应4.0.2的版本,镜像为:

registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:4.0.2

1. 目录无权限

常见,解决方法

chmod 777 {your nfs directory}

2. 目录有权限,但无法访问pv

单机较少见,集群中常见,原因为hosts设置不对

解决方案

1. 检查hosts文件

1.1.1.1   {your_nfs_server_host}

这里的nfs_server_host需要与nfs-provisioner安装时指定的nfs_server一致

2. 检查nfs server的配置
1. /etc/exports

这里记录了一系列可以访问共享文件夹的host,需要把要访问文件的host一并写在这里,举例

/home/nfs 1.1.1.1(rw,sync,no_root_squash)
/home/nfs .....
2. /etc/hosts.allow & /etc/hosts.deny

这里限制了哪些机器可以访问nfs服务器(注意,还没有到特定目录)。检索路径为,

  1. 判断是否在allow中,如果在,允许
  2. 判断是否在deny中,如果在,拒绝
  3. 如果都不存在,允许

因此通常方式为,在hosts.allow中,记入需要的host,在hosts.deny中,拒绝全部 举例 hosts.allow

mountd:1.1.1.1
mountd:2.2.2.2

hosts.deny

mountd:all

满足网络要求,路径权限,nfs provisioner即可正常创建pv

特殊

根据常识一般一个集群只有一个nfs-provisioner,但实际上是可以有多个的,只不过不同的provisioner,需要设置不同的storageclass,参考下列shell

helm install "$storage_cls-nfs-provisioner" nfs-subdir-external-provisioner --set nfs.server="$nfs_server" \
    --set nfs.path="$nfs_path" \
    --set storageClass.name="$storage_cls" \
    --set storageClass.provisionerName="$provisioner_name"

这样可以无限安装下去,达到存储扩容的目的,需要注意的是,对应pvc部分也要做修改,比如当创建新的pvc时,storageclassName可以递增等。

另外,默认的registry.k8s.io镜像一般国内无法下载,可以把registry.k8s.io/sig-storage替换为registry.cn-hangzhou.aliyuncs.com/google_containers尝试


<
Previous Post
Blog Post Title From First Header Bak Test
>
Next Post
如何解决k8s集群calico节点一直处于 0/1 running的情况