使用helm安装nfs-subdir-external-provisioner实现动态创建存储
存储组件
nfs-subdir-external-provisioner
是一个存储资源自动调配器,它可用将现有的 NFS 服务器通过持久卷声明来支持Kubernetes
持久卷的动态分配。此组件是对nfs-client-provisioner
的扩展,nfs-client-provisioner
已经不提供更新,且nfs-client-provisioner
的Github
仓库已经迁移到nfs-subdir-external-provisioner
的仓库。nfs-subdir-external-provisioner官方Github地址
k8s
版本:v1.23.1
准备工作:
- 搭建好
NFS
服务; - 安装好
helm
;
使用helm安装:
-
使用命令行进行安装:
#添加helm源 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner #创建个namespace(可选,主要是为了查看资源方便) kubectl create ns nfs-sc-default #使用helm安装(10.1.129.86为NFS地址,/data/nfs-data为共享的目录) helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set storageClass.name=nfs-sc-default #指定sc的名字 --set nfs.server=10.1.129.86 \ #指定nfs地址 --set nfs.path=/data/nfs-data \ #指定nfs的共享目录 --set storageClass.defaultClass=true \ #指定为默认sc -n nfs-sc-default #指定命名空间 #查看创建的sc kubectl get sc
-
使用
values.yaml
进行安装:#下载chart helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner #解压后可以看到values.yaml cat values.yaml | egrep -v '#|^$' ########### replicaCount: 1 strategyType: Recreate image: repository: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner tag: v4.0.2 pullPolicy: IfNotPresent imagePullSecrets: [] nfs: server: 10.1.129.86 #指定nfs地址 path: /data/nfs-data #指定nfs的共享目录 mountOptions: volumeName: nfs-subdir-external-provisioner-root reclaimPolicy: Retain storageClass: create: true defaultClass: true #指定为默认sc name: nfs-sc-default #指定sc的名字 allowVolumeExpansion: true reclaimPolicy: Delete archiveOnDelete: true onDelete: pathPattern: accessModes: ReadWriteOnce annotations: {} leaderElection: enabled: true rbac: create: true podSecurityPolicy: enabled: false podAnnotations: {} podSecurityContext: {} securityContext: {} serviceAccount: create: true annotations: {} name: resources: {} nodeSelector: {} tolerations: [] affinity: {} labels: {} ########### #就修改了上面4处参数后使用values.yaml文件进行安装 helm install nfs-subdir-external-provisioner \ nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ -f values.yaml \ -n nfs-sc-default #查看创建的sc kubectl get sc
测试:
-
创建
pvc
测试:先创建个
test-pvc.yaml
,在这个yaml
文件里我们没有特意指定使用哪个sc
,是因为之前创建的sc
是默认的sc
,如果没有指定默认sc
,需要在这个文件里指定使用哪个sc
。cat test-pvc.yaml ########## kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc # storageClassName: nfs-sc-default #指定sc名字,如果之前设定nfs-sc-default为默认sc可不用写这行指定 spec: accessModes: - ReadWriteMany resources: requests: storage: 1Mi ########## #创建pvc kubectl apply -f test-pvc.yaml -n nfs-sc-default #查看pvc kubectl get pvc -n nfs-sc-default
查看
pv
,如图第二个为sc
创建的pv
,名字为随机,并已经与test-pvc
绑定了: -
创建
pod
测试:创建
test-pod.yaml
文件,在这个yaml
文件里我们只指定了busybox
文件创建了个SUCCESS
文件,绑定的volume
里指定的是之前创建的test-pvc
。cat test-pod.yaml ######### kind: Pod apiVersion: v1 metadata: name: test-pod spec: containers: - name: test-pod image: busybox:latest 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-pvc ######### #创建测试pod kubectl apply -f test-pod.yaml -n nfs-sc-default #查看pod已经显示创建成功了 kubectl get pod -n nfs-sc-default
-
查看
NFS
目录里创建的文件:可以看见
SUCCESS
文件创建成功,并且可以看出命名目录的规则为namespace名称-pvc名称-pv名称,PV
名称是随机字符串,所以 每次只要不删除PVC
,那么Kubernetes
中的与存储绑定将不会丢失,要是删除PVC
也就意味着删除了绑定的文件夹,下次就算重新创建相同名称的PVC
,生成的文件夹名称也不会一致,因为PV
名是随机生成的字符串,而文件夹命名又跟PV
有关,所以删除PVC
需谨慎。 -
删除相关测试的资源:
kubectl delete -f test-pod.yaml -n nfs-sc-default kubectl delete -f test-pvc.yaml -n nfs-sc-default
posted on 2022-02-10 17:54 cerberus43 阅读(2729) 评论(0) 编辑 收藏 举报