通过Volume方式挂载NAS

本文介绍如何通过Kubernetes内置的Volume功能,将NAS文件系统挂载至Kubernetes集群进行访问。

前提条件

  • 已创建NFS协议文件系统。具体操作,请参见创建文件系统

    若需要加密NAS文件系统中的数据,请在创建NAS文件系统时配置加密类型。

  • 已添加挂载点。具体操作,请参见管理挂载点

  • 已自建Kubernetes集群且集群版本为1.16及以上版本。

  • 已确认Pod调度节点的安全组规则开放111端口和2049端口。具体操作,请参见添加安全组规则

  • 如果您的Kubernetes集群部署在线下IDC,请确保已打通IDC与阿里云的网络。您可通过阿里云高速通道、智能接入网关或者VPN网关打通IDC和云上网络。相关参考如下:

使用限制

NAS文件系统在挂载连通性、文件系统数量及协议类型等方面存在相应的约束条件。详细信息,请参见使用限制

重要

在没有卸载NAS文件系统前,务必不要删除NAS挂载点,否则会造成操作系统无响应。

操作步骤

  1. 登录自建Kubernetes集群节点。

  2. 配置Kubernetes节点。

    说明

    您需要为Kubernetes集群中的每个节点都进行配置。如果该集群有新增节点时,您也需要为其配置以下操作然后再将新增节点加入到Kubernetes集群中。

    1. 安装NFS客户端。具体操作,请参见安装NFS客户端

    2. 执行以下命令,配置/etc/nfsmount.conf文件。

      cat <<EOF >> /etc/nfsmount.conf
      [ Server "file-system-id.region.nas.aliyuncs.com" ]
      vers=3
      Proto=tcp
      Lock=False
      resvport=False
      rsize=1048576
      wsize=1048576
      hard=True
      timeo=600
      retrans=2
      EOF

      其中,file-system-id.region.nas.aliyuncs.comNAS文件系统挂载点地址,请根据实际值替换。您可以在NAS控制台,单击目标文件系统,然后单击挂载使用,将鼠标放置在挂载地址列的挂载点图标上获取挂载点地址。

      说明
      • 仅推荐使用NFS v3协议挂载NAS文件系统。

      • 以上配置参数均为必填参数,除file-system-id.region.nas.aliyuncs.com参数和vers协议版本可修改外,其他参数无需修改。

    3. 验证文件系统与Kubernetes节点网络连通。

      1. 执行以下命令,尝试挂载NFS协议文件系统。

        mount -t nfs file-system-id.region.nas.aliyuncs.com:/ /mnt 

        其中,file-system-id.region.nas.aliyuncs.comNAS文件系统挂载点地址,请根据实际值替换。

        如果挂载失败,请先确认NAS挂载点域名是否能够ping通,并且是否连通2049端口。如果以上问题不存在,请使用检测工具进行排查。具体操作,请参见Linux挂载NFS文件系统挂载失败排查

      2. 执行以下命令,查看挂载信息。

        mount | grep nfs | grep mnt 

        如果挂载参数包含vers=3、hard、noresvport、nolock等信息,则表示网络连通。参数信息

        确认网络连通后,请执行umount /mnt删除挂载的NFS协议文件系统。

  3. 启动应用Pod通过Volume挂载使用NFS文件系统。

    本文以启动一个nginx pod为例介绍通过Volume挂载使用NFS文件系统。

    1. 配置nginx.yaml

      cat  << EOF > ./nginx.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-deployment
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
              volumeMounts:
              - mountPath: /data
                name: test-nfs
            volumes:
            - name: test-nfs
              nfs:
                server: file-system-id.region.nas.aliyuncs.com    # 阿里云NAS文件系统挂载点地址,请根据实际值替换。例如,7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com。
                path: /    # NAS文件系统目录路径。该目录必须为已经存在的目录或根目录。通用型NAS的根目录为“/”,极速型NAS的根目录为“/share”。
      EOF
    2. 启用nginx pod使用NFS文件系统。

      kubectl apply -f ./nginx.yaml
  4. 检查Pod是否正常启动及挂载NFS文件系统成功。

    1. 执行命令,查看Pod运行状态。

      • 执行命令

        kubectl get pods | grep nginx 
      • 返回信息

        如果Pod运行状态为Running,则表示正常启动。

        image

    2. 执行以下命令,查看挂载结果。

      • 执行命令

        kubectl exec nginx-deployment-9b9b684f5-mgrkh  -- df -h /data
      • 返回信息

        如果返回如下类似信息,则表示挂载文件系统成功。

        image