在 Kubernetes 集群中,可以通过 Helm 部署 nfs-subdir-external-provisioner
来动态管理持久卷,这是一个存储资源自动调配器,可以将现有的 NFS 服务器通过持久卷声明来支持 持久卷的动态分配
前置条件:
- NFS服务器正常运行并且能够与集群通信
- 安装 Helm
- 集群正常运行
添加仓库
将 nfs-subdir-external-provisioner
的 Helm 仓库添加到本地
helm repo add nfs-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm repo update
部署
下载nfs-subdir-external-provisioner的 chart 到本地
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --untar
编辑其目录中的 values.yaml
下面是示例,,
cat values.yaml | grep -v "#"
replicaCount: 1
strategyType: Recreate
image:
repository: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner
tag: v4.0.0
pullPolicy: IfNotPresent
imagePullSecrets: []
nfs:
server: 10.0.80.253 # nfs服务端ip地址
path: /data # nfs共享目录
mountOptions:
volumeName: nfs-subdir-external-provisioner-root
reclaimPolicy: Retain
storageClass:
create: true
defaultClass: true
name: nfs-default # Storage Class的名字
....... # 下面的内容省略
使用自定义的values.yaml
进行部署,这里我选择了创建一个独立的namespace便于管理
helm install nfs-provisioner ./nfs-subdir-external-provisioner -f values.yaml -n nfs-provisioner --create-namespace
验证并测试
检查存储类是否创建成功
kubectl get storageclass
测试动态卷分配
创建 testpvc.yaml
并应用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: custom-nfs
kubectl apply -f testpvc.yaml -n nfs-provisioner
验证 PVC 是否绑定成功
kubectl get pvc -n nfs-provisioner
接下来可以起个pod进行验证
apiVersion: v1
kind: Pod
metadata:
name: test-nfs-provisioner
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "-c", "echo 'nfstest' > /mnt/testfile && sleep 3600"]
volumeMounts:
- name: test-storage
mountPath: /mnt
volumes:
- name: test-storage
persistentVolumeClaim:
claimName: test-claim
kubectl apply -f testpod.yaml -n nfs-provisioner
pod正常运行之后可以登录到nfs服务器查看到共享目录生成了一个目录和文件表明成功。。