k8s中级篇-Helm安装nfs-client-provisioner

4,782 阅读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=192.168.0.245 \
    --set nfs.path=/mnt/nfs/k8s \
    --set storageClass.name=nfs-storage \
    --set storageClass.defaultClass=true
    

    说明:

    • nfs.server:nfs服务地址
    • nfs.path:nfs根目录
    • storageClass.name:存储类名称
    • storageClass.defaultClass:设为默认存储类
  4. 查看安装情况

    kubectl get sc
    

    image-20201230225755913

使用样例

  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
    

    image-20201230230605138

  4. 查看nfs目录

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

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

    image-20201230230647910

  5. 卸载

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

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

    image-20201230230903980

  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挂到容器上就可以了,这里先不讲更为具体的案例,后面涉及到持久化的,会详细展开说明。

相关文章

k8s中级篇-使用rke安装k8s集群

k8s中级篇-Helm安装与入门

k8s中级篇-cert-manager+Let's Encrypt自动证书签发