Kubernetes动态分配存储卷组件 nfs-subdir-external-provisioner
存储组件 nfs-subdir-external-provisioner 是一个存储资源自动调配器,它可用现有的 NFS 服务器通过持久卷声明来支持 Kubernetes 持久卷的动态分配,自动创建的文件夹将被命名为 n a m e s p a c e − {namespace}− namespace−{pvcName}-${pvName} ,由三个资源名称拼合而成。
一、NFS服务安装配置
1、NFS服务端(master节点)
1).安装rpc、nfs服务
yum install rpcbind nfs-utils -y
2).创建共享目录
mkdir /nfs/data -p
3).修改配置文件
cat >/etc/exports<<-'EOF'
/nfs/data *(rw,sync,no_subtree_check,no_root_squash)
EOF
4).启动服务并添加开机自启
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs-server && systemctl enable nfs-server
5).服务端验证
showmount -e [host]
2、NFS客户端(node节点)
1).安装nfs服务
yum install nfs-utils -y
2).客户端验证
showmount -e [host]
node1
node2
二、Helm安装 nfs-subdir-external-provisioner
1、添加helm源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
2、更新helm仓库
helm repo update
3、查看helm仓库
helm repo list
4、安装 nfs-subdir-external-provisioner
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
-n kube-system \ #指定命名空间
--set image.repository=k8s.m.daocloud.io/sig-storage/nfs-subdir-external-provisioner \ #指定镜像地址
--set image.tag=v4.0.2 \ #指定版本
--set nfs.server=172.16.0.20 \ #指定nfs地址
--set nfs.path=/nfs/data \ #指定nfs的共享目录
--set storageClass.name=nfs-sc \ #指定sc的名字
--set storageClass.defaultClass=true #指定为默认sc
5、查看 helm安装 nfs-subdir-external-provisioner 服务的状态
helm status nfs-subdir-external-provisioner -n kube-system
6、检查 nfs-subdir-external-provisioner 服务 pod的状态
kubectl get pod -n kube-system
7、检查默认的存储是否是 nfs-sc
kubectl get sc
8、卸载
helm uninstall nfs-subdir-external-provisioner -n kube-system
三、测试nfs-sc
1、创建测试目录
mkdir test-nfs-pvc && cd test-nfs-pvc
2、创建测试文件
1).test-nfs-pvc.yaml
cat >test-nfs-pvc.yaml<<-'EOF'
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-nfs-pvc
spec:
storageClassName: nfs-sc
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
EOF
2).test-pod.yaml
cat >test-pod.yaml<<-'EOF'
kind: Pod
apiVersion: v1
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox:stable
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && exit 0 || exit 1"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-nfs-pvc
EOF
3、部署要创建的资源
kubectl apply -f ./
4、查看pv的状态
kubectl get pv
5、查看pvc的状态
kubectl get pvc
6、查看pod的状态
kubectl get pod
7、查看pod的详细信息
kubectl describe pod test-pod
8、查看共享目录下生成的文件
9、删除创建的资源
kubectl delete -f ./
10、验证是否删除成功
kubectl get pv,pvc,pod