本文介绍如何通过Flexvolume挂载静态NAS存储卷方式实现在容器服务Kubernetes集群中使用阿里云NAS存储卷。

前提条件

  1. 已创建Kubernetes集群,详情请参见创建Kubernetes专有版集群

    如果是自建Kubernets集群,请先下载并安装阿里云Flexolume驱动

  2. 确认Flexvolume驱动版本为v1.12.6.52-f6604e5-aliyun及以上版本。

    如果低于该版本,请升级Flexvolume驱动,详情请参见升级Flexvolume驱动

  3. 已创建文件系统,详情请参见创建文件系统

    创建的文件系统需要与您的Kubernetes集群在同一可用区。

  4. 已添加挂载点,详情请参见添加挂载点

    添加挂载点时所选的VPC网络要与您Kubernetes集群所在的VPC网络保持一致。

背景信息

您可以通过阿里云提供的flexvolume插件使用阿里云NAS文件存储服务,可通过以下两种方式:
  • 通过volume方式使用阿里云NAS存储卷
  • 通过PV或PVC方式使用阿里云NAS存储卷

通过volume方式使用阿里云NAS存储卷

  1. 创建Pod,此处以创建Nginx Pod为例。
    1. 创建一个yaml文件,此处以nas-deploy.yaml为例。
    2. 将以下内容复制到nas-deploy.yaml中,并根据实际情况替换对应参数。
      说明 设置极速型NAS的path时,需要以/share开头,例如:/share/k8s。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-static
        labels:
          app: nginx
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
              volumeMounts:                          #请根据您的NAS信息配置volumeMounts节点和volumes节点。
                - name: nas1
                  mountPath: "/data"
            volumes:                          
            - name: "nas1"
              flexVolume:
                driver: "alicloud/nas"
                options:
                  server: "0cd8b4a576-grs79.cn-hangzhou.nas.aliyuncs.com"
                  path: "/k8s"
                  vers: "3"
                  options: "nolock,tcp,noresvport"
      表 1. 参数说明
      参数 说明
      server NAS存储卷的挂载点域名。
      path NAS存储卷的挂载目录,支持挂载NAS子目录,且当子目录不存在时,会自动创建子目录并挂载。
      说明 设置极速型NAS的path时,需要以/share开头,例如:/share/k8s。
      vers 定义NFS挂载协议的版本号,支持3和4.0版本,默认且推荐使用版本3。
      mode 定义挂载目录的访问权限。
      说明
      • 只有挂载NAS存储卷的子目录时才能设置权限,如果是根目录不能设置权限。
      • 当NAS存储卷中数据量很大时,不建议配置mode,会导致执行挂载非常慢,甚至挂载失败。
      options 定义挂载选项。不配置此参数时,v3版本的默认挂载选项为nolock、tcp、noresvport,v4.0版本的默认挂载选项为noresvport。
    3. 执行如下命令,创建Pod。
      kubectl apply -f nas-deploy.yaml

      nas-deploy.yaml请根据实际情况替换。

  2. 执行以下命令,获取已创建的Pod。
    kubectl get pod
  3. 执行以下命令,验证挂载结果。
    kubectl exec -ti nas-static-85xxxx-wb7s9 sh
    mount | grep nfs

    nas-static-85xxxx-wb7s9为已创建的Pod,请根据实际情况替换。

    如果回显包含如下类似信息,说明挂载成功。挂载结果

通过PV或PVC方式使用阿里云NAS存储卷

  1. 创建PV。

    您可以使用yaml文件或者通过阿里云容器服务控制台创建PV。

    • 使用yaml文件创建PV。
      1. 创建一个yaml文件,此处以nas-pv.yaml为例。
      2. 将以下内容复制到nas-pv.yaml中。
        说明 设置极速型NAS的path时,需要以/share开头,例如:/share/k8s。
        apiVersion: v1
        kind: PersistentVolume
        metadata:
          name: pv-nas
        spec:
          capacity:
            storage: 5Gi
          storageClassName: nas
          accessModes:
            - ReadWriteMany
          flexVolume:
            driver: "alicloud/nas"
            options:
              server: "0cd8b4a576-uih75.cn-hangzhou.nas.aliyuncs.com"
              path: "/k8s"   
              vers: "3"
              options: "nolock,tcp,noresvport"

        重要参数说明请参见表 1

    • 通过容器控制台创建NAS存储卷。
      1. 登录容器服务管理控制台
      2. 选择容器服务 - Kubernetes > 集群 > 存储卷,单击创建
      3. 创建存储卷对话框中,配置存储卷的相关参数。
        说明 设置极速型NAS的子目录时,需要以/share开头,例如:/share/k8s。
        表 2. 参数说明
        参数 说明
        存储卷类型 选择NAS
        数据卷名 配置NAS存储卷的名称,存储卷名在集群内必须唯一。本文以pv-nas为例。
        存储驱动 支持Flexvolume和CSI。
        总量 配置NAS存储卷的容量。
        说明 所创建的存储卷容量不能超过磁盘容量。
        访问模式 包括ReadWriteManyReadWriteOnce,请根据需求选择。
        挂载点域名 NAS存储卷的挂载点域名,例如:file-system-id.region.nas.aliyuncs.com,请根据实际情况替换。
        子目录 NAS存储卷的子目录,以正斜线(/)开头。配置后将挂载指定的子目录。
        • 如果NAS存储卷的根目录下没有此子目录,会自动创建再挂载。
        • 您可以不填此项,默认挂载NAS存储卷的根目录。
        说明 设置极速型NAS的子目录时,需要以/share开头,例如:/share/k8s。
        权限 设置挂载目录的访问权限,例如:755、644、777等。您可以不填此项,默认权限为NAS存储卷原来的权限。
        说明
        • 只有挂载NAS存储卷的子目录时才能设置权限,如果是根目录不能设置权限。
        • 当NAS存储卷中数据量很大时,不建议配置此参数,会导致执行挂载非常慢,甚至挂载失败。
        权限模式 定义权限变更方式,支持非递归或递归方式。
        • 非递归:执行权限变更时,只对挂载目录起作用,其子目录、包含的文件不进行变更权限。
        • 递归:执行权限变更时,会对其子目录、包含的文件进行递归操作,全部变更权限。
        版本 NFS挂载协议的版本号,支持3和4.0版本,默认且推荐使用版本3
        标签 为NAS存储卷添加标签。
      4. 完成配置后,单击创建
  2. 创建PVC。

    您可以使用yaml文件或者通过阿里云容器服务控制台创建PVC。

    • 使用yaml文件创建PVC。
      1. 创建一个yaml文件,此处以nas-pvc.yaml为例。
      2. 将以下内容复制到nas-pvc.yaml中。
        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: pvc-nas
        spec:
          accessModes:
            - ReadWriteMany
          storageClassName: nas
          resources:
            requests:
              storage: 5Gi
    • 通过容器控制台创建PVC。
      • 选择存储卷 > 存储声明,单击创建
      • 创建存储声明对话框中,配置存储声明的相关参数。
  3. 创建Pod,此处以创建Nginx Pod为例。
    1. 创建一个yaml文件,此处以nas-pod.yaml为例。
    2. 将以下内容复制到nas-pod.yaml中,并根据实际情况替换对应参数。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-static
        labels:
          app: nginx
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
              volumeMounts:                         
                - name: pvc-nas
                  mountPath: "/data"
            volumes:
              - name: pvc-nas
                persistentVolumeClaim:
                  claimName: pvc-nas
    3. 执行如下命令,创建Pod。
      kubectl apply -f nas-pod.yaml

      nas-pod.yaml请根据实际情况替换。

  4. 执行以下命令,验证挂载结果。
    kubectl exec -ti nas-static-85xxxx-wb7s9 sh
    mount | grep nfs

    nas-static-85xxxx-wb7s9为已创建的Pod,请根据实际情况替换。

    如果回显包含如下类似信息,说明挂载成功。挂载结果