1 介绍

NFS 客户端配置器是 Kubernetes 的自动配置器,它使用已经配置的 NFS 服务器,自动创建持久卷,从而为其它应用提供持久化存储。自动创建的持久卷在nfs的根目录下存储形式为:${namespace}-${pvcName}-${pvName}。

本文通过helm部署nfs-client,并为minio 提供持久化存储。后续会在此处持续更新 nfs-client-provisioner 相关的使用方式和注意事项。

2 部署测试

2.1 使用helm

  1. 部署nfs-client
    详细参数可以参考 githu stable/nfs-client-provisioner
    搭建nfs服务器:
    # cat /etc/exports |grep data
    /data/nfs *(insecure,rw,sync,fsid=0,crossmnt,no_subtree_check)
    /etc/init.d/nfs-kernel-server restart
    # 部署nfs-client
    helm install nfs-client stable/nfs-client-provisioner --set nfs.server=192.168.1.4 --set nfs.path=/data/nfs
    
    或者在https://github.com/helm/charts 下载repo文件,解压出 stable/nfs-client-provisioner目录
    helm install nfs-client nfs-client-provisioner/ --set nfs.server=192.168.1.4 --set nfs.path=/data/nfs
    
    安装成功后可以正常get sc:
    $ kubectl get sc
    NAME         PROVISIONER                                       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    nfs-client   cluster.local/nfs-client-nfs-client-provisioner   Delete          Immediate           true                   11m
    
  2. 测试
    笔者使用新建的nfs-client 为mino分配动态存储,minio 部署方法见博文:minio笔记3–基于k8s搭建minio集群
    nfs-client 和 minio 部署成功后,可以看到已经有了SC nfs-client 且动态生成了pvc,如下图:
    sc:
    在这里插入图片描述
    pvc:
    在这里插入图片描述
    pv:
    在这里插入图片描述
    在物理机的nfs 目录下也生成了对应的存储目录,如下图所示:
    在这里插入图片描述
    综上,nfs-client 已经成功部署,且达到了应有的效果。

2.2 使用案例

本案例中基于nfs-client创建pvc, 然后将其挂载到busybox中。

vim pvc.yaml 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 102Mi

vim busybox.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: busybox-pvc
  name: busybox-pvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox-pvc
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: busybox-pvc
    spec:
      containers:
      - image: busybox:1.31
        name: busybox
        command: [sh, -c, "sleep infinity"]
        volumeMounts:
        - name: data-nfs
          mountPath: /data-nfs
        resources: {}
      volumes:
      - name: data-nfs
        persistentVolumeClaim:
          claimName: test-claim
status: {}

# kubectl apply -f pvc.yaml
# kubectl apply -f busybox.yaml

在busybox 终端中写入几个数据文件,可以发现已经正常挂载了nfs目录:
在这里插入图片描述

3 注意事项

  1. to add

4 说明

软件环境:
k8s 版本: 1.19.4
nfs-client-provisioner chart版本:stable/nfs-client-provisioner:1.2.11
参考文档:
1 github external-storage/tree/master/nfs-client
2 github stable/nfs-client-provisioner
3 k8s中创建nfs存储类(公共盘)

Logo

开源、云原生的融合云平台

更多推荐