简介

nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储

PV以 n a m e s p a c e − {namespace}- namespace{pvcName}- p v N a m e 的 命 名 格 式 提 供 ( 在 N F S 服 务 器 上 ) P V 回 收 的 时 候 以 a r c h i e v e d − {pvName}的命名格式提供(在NFS服务器上) PV回收的时候以 archieved- pvNameNFSPVarchieved{namespace}- p v c N a m e − {pvcName}- pvcName{pvName} 的命名格式(在NFS服务器上)
以后是回收后,在nfs服务器上查看共享目录的例子

[root@nfs-server]# tree /mnt/demo
/mnt/demo
├── archived-demo-project-test-claim-pvc-7b4f2b76-711c-405c-8642-03257d398c18
│   └── SUCCESS
├── archived-kube-system-test-claim-pvc-03d81e07-7549-44d2-a1c9-87a687bf5dcc
│   └── SUCCESS
└── demo-project-gdf-pvc-13636fcf-9fc3-4218-b83b-0c2e63c603aa


安装

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

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=192.168.5.226 \
    --set nfs.path=/mnt/demo \
    --set image.tag=v4.0.2 \
    --set image.repository=xxxxxxx/nfs-subdir-external-provisioner \
    -n kube-system
#xxxxxxx处,请替换为你的私有仓库地址,可以是阿里云的仓库,阿里云支持海外仓库构建。

helm安装插件成功的提示:
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Sat Nov 13 17:49:05 2021
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

创建一个存储卷

在kubeshere上创建一个nfs存储卷,名字gdf
在这里插入图片描述
使用nfs存储卷后支持多节点只读和多节点读写了。
多节点只读(ROX)
多节点读写(RWX)
在这里插入图片描述

在这里插入图片描述

查看nfs服务器

创建上面存储卷gdf后,登录nfs服务器查看,上次创建的/mnt/demo作为nfs共享目录,原本demo目录下是空的。

#格式${.PVC.namespace}-${.PVC.name}
ls /mnt/demo/
demo-project-gdf-pvc-13636fcf-9fc3-4218-b83b-0c2e63c603aa

另外用官方例子进行测试

#test-claim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

#test-pod.yaml
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-claim

执行命令

kubectl apply -f deploy/test-claim.yaml,deploy/test-pod.yaml 
kubectl delete -f deploy/test-claim.yaml,deploy/test-pod.yaml 
kubectl apply -f deploy/test-claim.yaml,deploy/test-pod.yaml  -n demo-project
kubectl delete -f deploy/test-claim.yaml,deploy/test-pod.yaml  -n demo-project

#每执行一行命令,使用kubectl get pv,pvc -A 观察pv和pvc的变化。最后到nfs服务器上查看目录会有 archieved-${namespace}-${pvcName}-${pvName} 格式的目录

参考:
nfs-subdir-external-provisioner
nfs-subdir-external-provisioner/README.md
kubernetes系列11—PV和PVC详解

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐