Helm 安装 nfs-client-provisioner

47 阅读3分钟

前言

自建 k8s 集群,或要做持久化存储,一般都会选择 nfs,而为了管理方便,我们一般都会安装 nfs-client-provisinoner 来动态创建存储。下面来介绍其安装与使用。

环境

主机名ip角色
mldong01192.168.0.245master
mldong02192.168.0.54node01
mldong03192.168.0.22node02

三台主机为华为软开云的 ECS,CentOS Linux release 7.6.1810 (Core)

安装前准备

所有节点安装 NFS 客户端

yum install -y nfs-utils

选择一台做 nfs server

进行如下配置(这里选择 mldong01 节点):

  1. 创建根目录

    mkdir -p /mnt/nfs
    
  2. 编辑

    vim /etc/exports
    /mnt/nfs/ 192.168.0.0/24(rw,sync,fsid=0)
    
    • 同 192.168.0.0/24 一个网络号的主机可以挂载 NFS 服务器上的 / mnt/nfs / 目录到自己的文件系统中
    • rw 表示可读写
    • sync 表示同步写
    • fsid=0 表示将 / mnt 找个目录包装成根目录
  3. 启动 nfs 服务

    systemctl start rpcbind.service
    systemctl start nfs-server.service
    
  4. 设置开机自启

    systemctl enable rpcbind.service
    systemctl enable nfs-server.service
    
  5. 使用配置生效

    exportfs -r
    
  6. 查看挂载情况

    exportfs
    

在另一个节点上验证

这里选择 mldong02

mkdir -p /mnt/nfs
mount -t nfs 192.168.0.245:/mnt/nfs /mnt/nfs

查看挂载情况

df -h | grep /mnt/nfs

可在 master 上添加一个文件,再 node 上是否可以查看

取消挂载 (按需)

umount /mnt/nfs

安装 nfs-provisioner

  1. 添加 Helm 存储库

    helm repo add azure http://mirror.azure.cn/kubernetes/charts/
    
  2. 本地仓库搜

    helm search repo nfs-client-provisioner
    
  3. 开始安装

    helm install nfs-storage azure/nfs-client-provisioner \
    --set nfs.server=10.0.0.8 \
    --set nfs.path=/home/admin/nfs \
    --set storageClass.name=nfs \
    --set storageClass.defaultClass=true \
    --set rbac.create=true \
    --namespace kube-system
    

    说明:

    • nfs.server:nfs 服务地址
    • nfs.path:nfs 根目录
    • storageClass.name:存储类名称
    • storageClass.defaultClass:设为默认存储类
    • rbac.create: 必须为true
    • namespace:命名空间,最好为kube-system
  4. 查看安装情况

    kubectl get sc
    

使用样例

  1. 创建一个 pvc

    # 配置
    cat <<EOF >  pvc-test.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-test
    spec:
      storageClassName: "nfs-storage"
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Mi
    EOF
    
  2. 执行发布命令

    kubectl apply -f pvc-test.yaml
    
  3. 查看 pvc

    # 查看列表
    kubectl get pvc
    # 查看详情
    

    状态为 Pending 则为异常,Bound 为成功。

    如果查看详情有 permission denied 字样,则需要给 nfs 目录 777 权限

    chmod 777 -R /mnt/nfs/k8s
    

  4. 查看 nfs 目录

    生成了一个动态的持久化目录

    命名规则为:命名空间 + pvc 名称 + pvc 标识 + 随机字符串

  5. 卸载

    kubectl delete -f pvc-test.yaml
    
  6. 卸载后,目录还会存在,不过会加上archived前辍

    当然,这个和 pvc 配置的策略有关,这里暂时不展开,只是先简单的会使用。

  7. pods 使用样例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: mldong-test
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx:latest
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 80
                  name: port
                  protocol: TCP
              volumeMounts:
                - name: nginx-pvc # 与下面的volumes.name一致
                  mountPath: "/usr/share/nginx/html" # 容器对应的目录
          volumes:
            - name: nginx-pvc # 这里定义的名称,与上面的volumeMounts.name一致
              persistentVolumeClaim: 
                claimName: nginx-pvc # 创建的pvc名称
    

小结

本文只是简单讲了 nfs-client-provisioner 的安装,基本上安装好 nfs-client-provisioner, 就可以使用动态存储类去定义 pvc 了。然后再将 pvc 挂到容器上就可以了,这里先不讲更为具体的案例,后面涉及到持久化的,会详细展开说明。

本文由 简悦 SimpRead 转码, 原文地址 juejin.cn