存储组件
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 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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章