Kubernetes-使用helm部署动态存储卷

Kubernetes使用NFS共享存储的两种方式

  • 静态持久卷,由管理员事先提供
  • 动态持久卷,由存储类(Storage Class)动态供应

通过helm部署动态持久卷

  1. 准备NFS服务器,并在各NODE节点安装NFS客户端
# NFS服务器IP:10.250.101.85
root@CNSZ-K8S-NFS-SERVER:/data# exportfs -v
/data/web-data	<world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/xx      	<world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/yy      	<world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/zz      	<world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data         	<world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

----
# 安装NFS客户端,以ubuntu20.04为例,并测试挂载
apt update; apt install nfs-common -y
  • 下载nfs-client-provisioner包
trnuser@k8s:~/helm$ helm search repo nfs-client-provisioner
NAME                         	CHART VERSION	APP VERSION	DESCRIPTION                                       
apphub/nfs-client-provisioner	1.2.8        	3.1.0      	nfs-client is an automatic provisioner that use...
trnuser@k8s:~/helm$ helm pull apphub/nfs-client-provisioner
  • 修改valume.yaml,配置storageclass name以及nfs

# Default values for nfs-client-provisioner.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1
strategyType: Recreate

image:
  repository: registry.cn-hangzhou.aliyuncs.com/kubeapps/quay-nfs-client-provisioner
  tag: v3.1.0-k8s1.11
  pullPolicy: IfNotPresent

nfs:
  server:
  path: /data    ## 共享目录
  mountOptions:

# For creating the StorageClass automatically:
storageClass:
  create: true

  # Set a provisioner name. If unset, a name will be generated.
  # provisionerName:

  # Set StorageClass as the default StorageClass
  # Ignored if storageClass.create is false
  defaultClass: false

  # Set a StorageClass name
  # Ignored if storageClass.create is false
  name: nfs-client   ## storageClass name
  • 安装nfs-client-provisioner
helm install nfs-provisioner --set nfs.server=10.250.101.85 .
  • 安装成功
trnuser@k8s:~/helm/nfs-client-provisioner$ kubectl get storageclasses.storage.k8s.io 
NAME         PROVISIONER                                            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   cluster.local/nfs-provisioner-nfs-client-provisioner   Delete          Immediate           true                   26m
trnuser@k8s:~/helm/nfs-client-provisioner$
  • 测试效果
    创建pvc并指定storageClass Name,会自动创建pv,并绑定
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs2
  labels:
    app: nfs2
spec:
  storageClassName: "nfs-client"
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Mi
trnuser@k8s:~/pod/pv$ kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-client   Bound    pvc-48c81989-1035-4757-8b28-5686cf80c345   10Mi       RWX            nfs-client     25m
nfs2         Bound    pvc-756dee41-f868-4c43-a044-d5ad62b571a3   10Mi       RWX            nfs-client     25m
www-web-0    Bound    pv1-1                                      1Gi        RWO            xx             23h
www-web-1    Bound    pv2
  • 存储端如下
root@CNSZ-K8S-NFS-SERVER:/data# ll /data/
total 4
drwxrwxrwx  8 root root  180 Mar 16 05:54 ./
drwxr-xr-x 21 root root 4096 Feb 26 10:17 ../
drwxrwxrwx  2 root root    6 Mar 16 05:54 service-nfs2-pvc-756dee41-f868-4c43-a044-d5ad62b571a3/
drwxrwxrwx  2 root root    6 Mar 16 05:53 service-nfs-client-pvc-48c81989-1035-4757-8b28-5686cf80c345/
drwxrwxrwx  2 root root   24 Mar  1 06:06 web-data/
drwxrwxrwx  2 root root   24 Mar  1 03:38 xx/
drwxrwxrwx  2 root root   34 Mar 15 07:12 yy/
drwxrwxrwx  2 root root    6 Feb 26 10:21 zz/
posted @ 2021-03-16 14:22  独孤云翔  阅读(673)  评论(0)    收藏  举报