Helm搭建NFS的StorageClass(安装Helm)(坑) 电脑版发表于:2020/5/20 16:55 ![](https://img.tnblog.net/arcimg/hb/2d2192e9304944548a772f5454b8aefb.png) >#Helm搭建NFS的StorageClass [TOC] <br/> Windows 安装 chocolatey ------------ <br/> ![](https://img.tnblog.net/arcimg/hb/cf0944bab6a9435a926b2e6dc9fb338a.png) https://chocolatey.org/install <br/> Windows 安装 Helm ------------ <br/> ```bash choco install kubernetes-helm ``` <br/> linux 安装 Helm ------------ <br/> ```bash wget https://get.helm.sh/helm-v3.0.0-beta.2-linux-amd64.tar.gz tar -zxvf helm-v3.0.0-beta.2-linux-amd64.tar.gz cd linux-amd64/ cp helm /usr/local/bin helm init ``` <br/> 安装 nfs-client-provisioner (第一种方式) ------------ <br/> >添加能下载nfs-client-provisioner的仓库 ```bash helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/ helm repo update ``` >修改values.yaml ```bash nfs: server: 150.72.2.13 path: /nfs_data ``` `name: nfs-client` >安装(注意中途自行解压) ```bash cd nfs-client-provisioner helm install --name nfs -namespace nfs -f values.yaml . ``` >安装完成 ```bash kubectl get sc ``` ![](https://img.tnblog.net/arcimg/hb/1d53a2cb6b2d4418bb2ea64d7d0a8d06.png) <br/> <font style="color:red;font-weight:bold;">这种方式在后续发现添加Persistent Volume Claims时总是失败</font> <br/> 通过Azure进行安装 nfs-client-provisioner (第二种方式) ------------ <br/> >添加能下载 azure/nfs-client-provisioner 的仓库 ```bash helm repo add azure http://mirror.azure.cn/kubernetes/charts/ helm repo update ``` >安装 ```bash helm install nfs-client azure/nfs-client-provisioner --set nfs.server=x.x.x.x --set nfs.path=/nfsdata ``` >发现问题 ![](https://img.tnblog.net/arcimg/hb/758c8f17e2434f03b2535b6772f0c046.png) <br/> <font style="color:red;font-weight:bold;">这里也发现添加Persistent Volume Claims时总是失败</font> >解决办法 <font style="color:#00cec9;font-weight:bold;">最后在nfs服务器上发布上去就没毛病了</font> ```bash sudo service nfs-kernel-server restart ``` <br/> >通过Kubernetes-Dashboard 查看 Storage Classes 结果 ![](https://img.tnblog.net/arcimg/hb/c079b81e34a64a91be2c6156e04ea1fb.png) <br/> 简单的测试一下 ------------ <br/> >创建 demo-nfs-pvc.yaml 文件 ```bash apiVersion: v1 kind: PersistentVolumeClaim metadata: name: demo-nfs-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 400m storageClassName: nfs-client ``` >发布 demo-nfs-pvc.yaml `kubectl apply -f demo-nfs-pvc.yaml` >查看结果 ![](https://img.tnblog.net/arcimg/hb/b7b00b42242b4c7e8b3bb9328775abf0.png) ![](https://img.tnblog.net/arcimg/hb/446975bbf1f344788568f5ed147c2a69.png) tn2>如果遇到了`sing Kubernetes v1.20.0, getting "unexpected error getting claim reference: selfLink was empty, can't make reference"`这种问题,需要修改`api-server.yaml`文件。 ```bash vim /etc/kubernetes/manifests/kube-apiserver.yaml # 添加这一行 - --feature-gates=RemoveSelfLink=false ``` tn2>如果遇到`bad option; for several filesystems (e.g. nfs, cifs) you might need a 。。。`请给每个节点安装nfs-util ```bash # Centos sudo yum install nfs-utils # Ubuntu apt install nfs-common ``` ### 在K8s 1.24后又变卦了 tn2>修改`--feature-gates=RemoveSelfLink=false`后,无法启动`api-server`。现在使用新的方式去做 ```bash ?#下载 wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.16/nfs-subdir-external-provisioner-4.0.16.tgz #解压 tar -xvf nfs-subdir-external-provisioner-4.0.16.tgz cd nfs-subdir-external-provisioner vim values.yaml ``` ![](https://img.tnblog.net/arcimg/hb/02631e48735c4765ad552f8907a39d99.png) tn2>然后使用 helm安装命令安装即可 ```bash helm install nfs-subdir-external-provisioner . -n nfs ``` tn2>会创建一个nfs-client的storageclass,如果需要可以使用下面命令改成默认存储 ```bash kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' ``` tn2>有镜像问题可修改为:`registry.cn-hangzhou.aliyuncs.com/k8s-image-mirrors/nfs-subdir-external-provisioner`