手工部署内容参考 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy
下面写一下使用helm 部署的方法
helm charts 在这里 https://github.com/helm/charts/tree/master/stable/nfs-client-provisioner
手工下载并部署到我们自己的helm 仓库
cd /home/nfs/html
helm package nfs-client-provisioner --save=false
helm repo index --url=http://192.168.220.128:32598 .
helm repo update
下面开始安装
首先准备好nfs
参考 https://mp.csdn.net/postedit/93199622
mkdir -p /k8s/nfs
vi /etc/exports
添加记录
/k8s/nfs *(rw,no_root_squash)
exportfs -r
exportfs
然后执行helm install命令 , 这里面的空格都得英文的, 如果有不对的会报错 Error: This command needs 1 argument: chart name
helm install --set nfs.server=192.168.220.128 --set nfs.path=/k8s/nfs my/nfs-client-provisioner
运行测试看一下效果
测试文件 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy
这里面有一个测试 pod , 一个pvc claim
claim文件 test-claim.yaml , 注意 storeage-class 是 nfs-client , 在使用helm创建的时候,默认值是这个, 如果写错了,pvc会pending
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
创建pvc , 如果从页面复制, test-claim.yaml前面带不规范的空白字符的话, 会报错 error: the path "\u00a0test-claim.yaml" does not exist, 清掉字符重新输入就好了
kubectl apply -f test-claim.yaml
查看pvc
kubectl get pvc
此时打开k8s监控持久化卷动态创建一个
声明也存在了
至此自动创建nfs存储卷完成
使用应用商店安装遇到问题
"message": "pods \"nfs-client-nfs-client-provisioner-76d4d74dbf-\" is forbidden: unable to validate against any pod security policy: [spec.volumes[0]: Invalid value: \"nfs\": nfs volumes are not allowed to be used]"
"message": "ReplicaSet \"nfs-client-nfs-client-provisioner-76d4d74dbf\" has timed out progressing."
看起来像权限问题
检查权限, 没发现问题,原来的名字是 /data/nfs, 换成 /data/k8sdata
主机上执行
sudo vi /etc/exports
/data/k8sdata/ 192.168.106.0/24(rw,no_root_squash)
sudo exportfs -r
从机上执行
sudo mount -t nfs 192.168.106.140:/data/k8sdata /data/k8sdata
按目录也不行,192.168.106.0/24换成*也不行
换下面这个参数才可以
podSecurityPolicy.enabled true
报错
E1031 03:45:46.275571 1 leaderelection.go:234] error retrieving resource lock kube-system/cluster.local-nfs-nfs-client-provisioner: endpoints "cluster.local-nfs-nfs-client-provisioner" is forbidden: User "system:serviceaccount:paas-test:nfs-nfs-client-provisioner" cannot get resource "endpoints" in API group "" in the namespace "kube-system"
使用版本 v3.0.1-k8s1.11
升级版本使用latest标签就可以使用了