使用NAS静态存储卷

NAS存储卷是一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统,适用于大数据分析、共享数据、Web应用以及保存日志等场景。通过CSI组件,您可以使用已有的NAS创建PVPVC,并在工作负载中挂载,实现数据的持久化存储和共享存储。

前提条件

  • 集群默认已安装CSI组件。如需升级,请参见升级csi-plugincsi-provisioner

    说明

    如果您集群中使用Flexvolume组件,由于Flexvolume已废弃,请参见迁移FlexvolumeCSI完成迁移后再进行挂载。您可以在运维管理 > 组件管理,在存储页签下确认存储组件类型。

  • 确认已有NAS满足以下条件,否则请重新创建文件系统或者使用NAS动态存储卷

    • 协议类型为NFS。

      ACK不支持挂载SMB协议的NAS文件系统。

    • 挂载点和集群节点在同一VPC内,且状态可用。如需添加挂载点,请参见管理挂载点

      NAS文件系统只能挂载到相同VPCPod上,不支持跨VPC挂载。同一VPC下,NAS可以跨可用区挂载。

    说明

    如需加密NAS存储卷中的数据,请在创建NAS文件系统时配置加密类型。

注意事项

挂载NAS静态存储卷(kubectl)

步骤一:创建PV

  1. 修改以下YAML内容,并保存为pv-nas.yaml。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
      labels:
        alicloud-pvname: pv-nas
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeHandle: pv-nas   # 必须与PV Name保持一致。
        volumeAttributes:
          server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com"  # NAS挂载点地址。挂载点所属VPC必须与集群所属VPC一致。
          path: "/csi"  # 挂载子目录。
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3

    参数

    说明

    name

    PV的名称。

    labels

    设置PV的标签。

    storage

    PV的容量。

    重要

    NAS存储卷的实际可用容量不受该配置限制,由NAS文件系统的规格决定,请参见通用型NAS极速型NAS确认具体可用容量。

    accessModes

    配置访问模式,默认为ReadWriteMany,也支持ReadWriteOnceReadOnlyMany

    driver

    驱动类型。此处必须配置为nasplugin.csi.alibabacloud.com,表示使用阿里云NAS CSI插件。

    volumeHandle

    配置PV的唯一标识符,必须与PV Name保持一致。若需要同时使用多个PV,则各个PV中该值须唯一。

    server

    NAS挂载点地址。挂载点所属VPC必须与集群所属VPC一致。

    关于如何查看挂载点地址,请参见管理挂载点

    path

    要挂载的NAS子目录。

    • 如果未设置,则默认挂载到根目录。

    • 如果NAS中没有该目录,会自动创建后再进行挂载。

    说明

    通用型NAS的根目录为/,极速型NAS的根目录为/share。挂载极速型NAS的子目录时,path必须以/share开头,如/share/data

    mountOptions

    NAS的挂载参数,包括NFS协议版本等。推荐使用NFS v3协议,极速型NAS仅支持NFS v3。关于NFS协议的更多信息,请参见NFS协议

  2. 创建PV。

    kubectl create -f pv-nas.yaml
  3. 查看PV。

    kubectl get pv

    预期返回:

    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM    STORAGECLASS     VOLUMEATTRIBUTESCLASS   REASON   AGE
    pv-nas   5Gi        RWX            Retain           Available                             <unset>                          25s

步骤二:创建PVC

  1. 将以下YAML内容保存至pvc-nas.yaml文件。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas

    参数

    说明

    name

    PVC名称。

    accessModes

    访问模式。默认为ReadWriteMany,也支持ReadWriteOnceReadOnlyMany

    storage

    声明所需使用的存储卷的容量。

    重要

    NAS存储卷的实际可用容量不受该配置限制,由NAS文件系统的规格决定,请参见通用型NAS极速型NAS确认具体可用容量。

    matchLabels

    输入PV的标签,用于关联PV。

  2. 创建PVC。

    kubectl create -f pvc-nas.yaml
  3. 查看PVC。

    kubectl get pvc

    预期返回如下,可以看到PVC已关联PV。

    NAME       STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-nas    Bound    pv-nas    5Gi        RWX                           <unset>                 5s

步骤三:创建应用并挂载NAS

  1. 将以下YAML内容保存为nas.yaml。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: "/data"
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: pvc-nas

    参数

    说明

    mountPath

    NAS在容器中挂载的位置。

    claimName

    PVC的名称,用于绑定PVC。

  2. 创建Deployment并挂载NAS。

    kubectl create -f nas.yaml
  3. 查看DeploymentPod的部署情况。

    kubectl get pod -l app=nginx

    预期返回:

    NAME                  READY   STATUS    RESTARTS   AGE
    nas-test-****-***a    1/1     Running   0          32s
    nas-test-****-***b    1/1     Running   0          32s

挂载NAS静态存储卷(控制台)

步骤一:创建存储卷(PV)

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储卷

  3. 存储卷页面,单击创建

  4. 在弹出的对话框中,完成参数配置,然后单击创建

    配置项

    说明

    示例值

    存储卷类型

    选择NAS

    NAS

    名称

    存储卷名称。在集群内必须唯一。

    pv-nas

    总量

    存储卷的容量。

    重要

    NAS存储卷的实际可用容量不受该配置限制,由NAS文件系统的规格决定,请参见通用型NAS极速型NAS确认具体可用容量。

    5Gi

    访问模式

    支持ReadWriteManyReadWriteOnce

    ReadWriteMany

    是否使用CNFS

    是否使用CNFS功能。基于CNFS托管NAS可以提升NAS的性能和QoS控制。

    本文主要介绍如何直接使用已有NAS创建存储卷,不使用CNFS功能。如需使用CNFS配置已有NAS,请参见创建CNFS管理NAS文件系统(推荐)

    不开启

    挂载点域名

    仅在未开启CNFS时,需要设置。

    您可以通过选择挂载点或者自定义的方式配置要挂载的NAS文件系统目录。关于如何查看挂载点地址,请参见管理挂载点

    0c47****-mpk25.cn-shenzhen.nas.aliyuncs.co

    高级选项(选填)

    挂载路径

    要挂载的NAS子目录。

    • 如果未设置,则默认挂载到根目录。

    • 如果NAS中没有该目录,会自动创建后再进行挂载。

    说明

    通用型NAS的根目录为/,极速型NAS的根目录为/share。挂载极速型NAS的子目录时,path必须以/share开头,如/share/data

    /data

    回收策略

    默认为Retain。表示删除PVC时,PVNAS文件不会被删除,需要您手动删除。

    说明

    Delete需配合archiveOnDelete一起使用。由于静态PV暂不支持archiveOnDelete,仅在此处选择Delete时,删除PVC时,不会真正删除PVNAS文件。如需配置archiveOnDelete,请使用NAS动态存储卷

    Retain

    挂载选项

    NAS的挂载参数,包括NFS协议版本等。推荐使用NFS v3协议,极速型NAS仅支持NFS v3。关于NFS协议的更多信息,请参见NFS协议

    • nolock,tcp,noresvport

    • vers=3

    标签

    为该存储卷添加标签。

    pv-nas

    创建完成后,在存储卷页面可以看到新创建的PV。

步骤二:创建存储声明(PVC)

  1. 在集群管理页左侧导航栏,选择存储 > 存储声明

  2. 存储声明页面,单击创建

  3. 在弹出的对话框中,完成参数配置,然后单击创建

    参数

    说明

    示例值

    存储声明类型

    选择NAS

    NAS

    名称

    存储声明名称在集群内必须唯一。

    pvc-nas

    分配模式

    选择已有存储卷。

    说明

    若未创建存储卷,您可以设置分配模式创建存储卷,配置创建存储卷参数。

    选择已有存储卷

    已有存储卷

    单击选择已有存储卷,在目标存储卷右侧操作列单击选择,选择存储卷。

    pv-nas

    总量

    声明所需使用的存储卷的容量。不能大于存储卷的总量。

    重要

    NAS存储卷的实际可用容量不受该配置限制,由NAS文件系统的规格决定,请参见通用型NAS极速型NAS确认具体可用容量。

    5

    访问模式

    默认为ReadWriteMany,也可选择ReadWriteOnceReadOnlyMany

    ReadWriteMany

步骤三:创建应用并挂载NAS

  1. 在集群管理页左侧导航栏,选择工作负载 > 无状态

  2. 无状态页面,单击使用镜像创建

  3. 配置创建应用的参数信息,配置完成后,单击创建

    主要参数如下,其他参数保持默认即可。更多信息,请参见创建无状态工作负载Deployment

    配置项

    参数

    说明

    示例

    应用基本信息

    应用名称

    Deployment名称,自定义输入。格式要求请参考界面提示。

    nas-test

    副本数量

    Deployment的副本数量。

    2

    容器配置

    镜像名称

    用于部署应用的镜像地址。

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    所需资源

    所需的vCPU和内存资源。

    0.25 Core,512 MiB

    数据卷

    单击增加云存储声明,然后完成参数配置。

    • 挂载源:选择之前创建的PVC。

    • 容器路径:输入NAS文件系统要挂载到的容器路径。

    • 挂载源:pvc-nas

    • 容器路径:/data

  4. 查看应用部署状态。

    1. 无状态页面,单击应用名称。

    2. 容器组页签下,确认Pod已正常运行(状态为Running)。

验证NAS的共享存储和持久化存储

按照上文示例创建的Deployment中含有2Pod,2Pod挂载了同一NAS文件系统。您可以通过以下方式进行验证:

  • 在一个Pod中创建文件,然后另一个Pod中查看文件,以此来验证共享存储。

  • 重建Deployment,然后在新创建的Pod中查看文件系统中的数据是否存在,以此来验证持久化存储。

  1. 查看Pod信息。

    kubectl get pod | grep nas-test

    返回示例如下:

    nas-test-*****a   1/1     Running   0          40s
    nas-test-*****b   1/1     Running   0          40s
  2. 验证共享存储。

    1. 在一个Pod中创建文件。

      以名为nas-test-*****aPod作为示例:

      kubectl exec nas-test-*****a -- touch /data/test.txt
    2. 在另一个Pod中查看文件。

      以名为nas-test-*****bPod作为示例:

      kubectl exec nas-test-*****b -- ls /data

      预期返回如下,可以看到已共享新建的文件test.txt

      test.txt
  3. 验证持久化存储。

    1. 重建Deployment。

      kubectl rollout restart deploy nas-test
    2. 查看Pod,等待新Pod创建成功。

      kubectl get pod | grep nas-test

      返回示例如下:

      nas-test-*****c   1/1     Running   0          67s
      nas-test-*****d   1/1     Running   0          49s
    3. 在新Pod中查看文件系统中的数据是否存在。

      以名为nas-test-*****cPod作为示例:

      kubectl exec nas-test-*****c -- ls /data

      预期返回如下,可以看到NAS文件系统中的数据依然存在,在新Pod的挂载目录下可以重新获取。

      test.txt

常见问题

在挂载和使用NAS存储卷的过程中,如果遇到问题,可参考以下文档进行排查。

相关文档

通过CNFS可以实现对NAS文件系统的独立管理,提升NAS文件系统的性能和QoS控制。具体操作,请参见通过CNFS管理NAS文件系统(推荐)