nfs-client-provisioner是一个automatic provisioner,使用NFS作为存储,自动创建PV和对应的PVC,本身不提供NFS存储,需要外部先有一套NFS存储服务。
- PV以 ${namespace}-${pvcName}-${pvName}的命名格式提供(在NFS服务器上)
- PV回收的时候以 archieved-${namespace}-${pvcName}-${pvName} 的命名格式(在NFS服务器上)
1、权限体系构建
1.1、创建serviceaccount
ServiceAccount也是一种账号, 供运行在pod中的进程使用, 为pod中的进程提供必要的身份证明
1 | $ cat > serviceaccount.yaml <<EOF |
1.2、创建role
1 | $ cat >clusterrole.yaml<<EOF |
1.3、账户和角色绑定
1 | $ cat >clusterrolebinding.yaml <<EOF |
1.4、执行创建
1 | $ kubectl create -f serviceaccount.yaml -f clusterrole.yaml -f clusterrolebinding.yaml |
2、安装部署
下载deployment.yaml文件,需要修改NFS服务器所在的IP地址(10.10.10.60),以及NFS服务器共享的路径(/ifs/kubernetes),两处都需要修改为你实际的NFS服务器和共享目录
2.1、部署存储供应卷
根据PVC的请求, 动态创建PV存储.
1 | $ cat > deployment.yaml <<EOF |
- 修改StorageClass文件并部署class.yaml
此处可以不修改,或者修改provisioner的名字,需要与上面的deployment的PROVISIONER_NAME名字一致
2.2、创建storageclass
1 | $ cat > class.yaml <<EOF |
2.3、执行创建
1 | $ kubectl apply -f deployment.yaml |
2.3.1、查看StorageClass
1 | $ kubectl get storageclass |
2.3.2、设置默认后端存储
设置这个default名字的SC为Kubernetes的默认存储后端
1 | kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' |
- storage.yaml (和上面一样)
1
2
3
4
5
6
7
8
9
10
11$ cat > storage.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: fuseim.pri/ifs
parameters:
archiveOnDelete: "false"
EOF
2.3.3、查看验证
1 | $ kubectl get all -n kube-ops |
3、验证测试
3.1、创建一个测试存储
1 | $ cat > test-claim.yaml <<EOF |
3.2、启动测试POD
POD文件如下,作用就是在test-claim的PV里touch一个SUCCESS文件
1 | $ cat > test-pod.yaml <<EOF |
3.3、执行创建
1 | $ kubectl apply -f ./ |
3.4、查看验证
1 | $ kubectl get pod,pv -n kube-ops |
- 登录nfs服务器查看是否成功的创建目录
1
2$ ls /opt/
kube-ops-test-claim-pvc-2f0057b0-df35-11e9-ad62-fa163e53d4c8
3.5、更改PersistentVolumes 中的一个回收策略
查看集群中PersistentVolumes
1
2
3$ kubectl get pv -n kube-ops
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-2f0057b0-df35-11e9-ad62-fa163e53d4c8 1Mi RWX Delete Bound kube-ops/test-claim managed-nfs-storage 3m6s更改PersistentVolumes
1
2
3
4
5
6$ kubectl patch pv pvc-2f0057b0-df35-11e9-ad62-fa163e53d4c8 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
persistentvolume/pvc-2f0057b0-df35-11e9-ad62-fa163e53d4c8 patched
$ kubectl get pv -n kube-ops
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-2f0057b0-df35-11e9-ad62-fa163e53d4c8 1Mi RWX Retain Bound kube-ops/test-claim managed-nfs-storage 3m54s删除测试
1
2# kubectl delete -f test-pod.yaml
# kubectl delete -f test-claim.yaml