使用NAS静态存储卷

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

前提条件

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

    说明

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

  • 已通过kubectl连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

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

    • 协议类型为NFS。极速型NAS仅支持NFSv3。

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

      说明

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

使用限制

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

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

  • NAS静态存储卷不支持扩容。

注意事项

步骤一:挂载NAS静态存储卷

kubectl

  1. 创建静态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一致。
            path: "/csi"  # 挂载子目录。
        mountOptions:
        - nolock,tcp,noresvport
        - vers=3

      参数

      说明

      name

      PV的名称。

      labels

      设置PV的标签。

      storage

      NAS的可使用量。

      说明

      NAS存储卷在实际使用中,不受此storage使用量限制,根据不同NAS使用限制确认NAS存储卷最终可使用的容量。

      accessModes

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

      driver

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

      volumeHandle

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

      server

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

      说明

      替换为实际的挂载点地址,如何查看挂载点地址,请参见查看挂载点地址

      path

      在容器中挂载NAS存储卷的子目录。通用型NAS的父目录为/。

      重要

      极速型NAS需要以/share为父目录,则此处子目录应为/share/csi

      mountOptions

      挂载NAS的options参数在mountOptions中配置,包括NFS协议版本。挂载NAS存储卷的NFS协议版本号,推荐使用v3,极速类型NAS仅支持v3。关于NFS协议的更多信息,请参见NFS协议

    2. 创建静态PV。

      kubectl create -f pv-nas.yaml
  2. 创建NAS存储声明PVC,使用selector筛选PV,精确配置PVC和PV的绑定关系。

    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名称。

      pvc-nas

      accessModes

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

      ReadWriteMany

      storage

      声明应用使用NAS存储卷的容量,不能大于存储卷的总量。

      说明

      NAS存储卷在实际使用中,不受此storage使用量限制,根据不同NAS使用限制确认NAS存储卷最终可使用的容量。

      5Gi

      matchLabels

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

      pv-nas

    2. 创建静态PVC。

      kubectl create -f pvc-nas.yaml
  3. 创建名为nas-static的应用,并挂载PVC。

    1. 以下为创建nas-static应用的nas.yaml示例文件。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-static
        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. 创建名为nas-static的应用,并挂载PVC。

      kubectl create -f nas.yaml
  4. 查看Pod信息。

    kubectl get pod

    预期输出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
    nas-static-c5bb4746c-4****    1/1     Running   0          32s

控制台

步骤一:创建PV

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

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

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

  4. 创建存储卷页面配置参数,配置完成后,单击创建

    配置项

    说明

    示例值

    存储卷类型

    选择NAS

    NAS

    名称

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

    pv-nas

    总量

    存储卷的容量。

    说明

    NAS文件系统本身不限制使用量。此处不是NAS文件系统的使用限额,只是所创建存储卷的容量声明。

    20Gi

    访问模式

    支持ReadWriteManyReadWriteOnce。默认为ReadWriteMany

    ReadWriteMany

    是否使用CNFS

    是否使用CNFS功能。开启后,您需要进行以下操作:

    开启

    挂载点域名

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

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

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

    高级选项(选填)

    挂载路径:NAS文件系统中的挂载路径。以/为根目录,设定后存储卷将挂载到指定的子目录。

    • 如果NAS根目录下没有此子目录,会默认创建后再进行挂载。

    • 您可以不填此项,默认挂载到NAS根目录。

    • 极速型NAS需要以/share为根目录,例如/share/data

    /data

    回收策略:默认为Delete,支持Retain

    • Delete:需配合archiveOnDelete一起使用。

      • archiveOnDeletetrue时,删除PVC时,PV和NAS文件只会被重命名,不会被删除。

      • archiveOnDeletefalse时,删除PVC时,PV和NAS文件会被真正删除。

    • Retain:删除PVC时,PV和NAS文件不会被删除,需要您手动删除。

    如果数据安全性要求高,推荐使用Retain,以免误删除数据。

    Retain

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

    v3

    标签

    为该存储卷添加标签。

    pv-nas

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

步骤二:创建PVC

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

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

  3. 创建存储声明页面配置参数。配置完成后,单击创建

    参数

    说明

    示例值

    存储声明类型

    选择NAS

    NAS

    名称

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

    pvc-nas

    分配模式

    选择已有存储卷。

    说明

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

    选择已有存储卷

    已有存储卷

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

    已有存储卷

    总量

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

    说明
    • 所创建存储卷声明的容量不能超过待挂载的存储卷容量。

    20

    访问模式

    默认为ReadWriteMany,也可选择ReadWriteOnceReadOnlyMany

    ReadWriteMany

步骤三:创建应用

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

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

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

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

    配置项

    参数

    说明

    示例

    应用基本信息

    应用名称

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

    test-nas

    副本数量

    Deployment的副本数量。

    2

    容器配置

    镜像名称

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

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

    所需资源

    所需的vCPU和内存资源。

    0.25 vCPU,0.5 GiB

    数据卷

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

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

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

    • 挂载源:pvc-nas

    • 容器路径:/data

    image.png

  4. 查看应用部署状态。

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

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

步骤二:验证NAS存储特性

以上创建的工作负载Deployment中包含2个Pod,2个Pod挂载了同一个NAS文件系统,您可以通过以下方式对NAS存储卷进行共享存储和持久化存储验证。

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

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

验证NAS的持久化存储

  1. 查看应用所在的Pod。

    kubectl get pod 

    预期输出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-a****   1/1     Running   0          32s
    nas-static-c5bb4746c-b****    1/1     Running   0          32s
  2. 在一个Pod中创建文件。

    1. 查看应用中挂载的/data路径下有无文件。

      以一个名为nas-static-5b5cdb85f6-a****的Pod为例。

      kubectl exec nas-static-5b5cdb85f6-a**** -- ls /data

      无返回结果,说明当前存储路径/data下无文件。

    2. 在该Pod的/data路径下创建文件nas。

      kubectl exec nas-static-5b5cdb85f6-a**** -- touch /data/nas
  3. 在另一个Pod中查看文件。

    以另一个名为nas-static-5b5cdb85f6-b****的Pod为例。

    kubectl exec nas-static-5b5cdb85f6-b**** -- ls /data

    预期输出:

    nas
  4. 重建Pod。

    1. 删除Pod。

      kubectl delete pod nas-static-5b5cdb85f6-a****
    2. 同时在另一个窗口中,查看Pod删除及Kubernetes重建Pod的过程。

      kubectl get pod -w -l app=nginx
  5. 验证删除Pod后,NAS里创建的文件是否还存在。

    1. 查看重建的Pod名称。

      kubectl get pod

      预期输出:

      NAME                                  READY    STATUS    RESTARTS   AGE
      nas-static-5b5cdb85f6-c****   1/1     Running   0          32s
      nas-static-c5bb4746c-a****    1/1     Running   0          32s
    2. 查看重建Pod的/data路径下的文件。

      以名为nas-static-5b5cdb85f6-c****的Pod为例。

      kubectl exec nas-static-5b5cdb85f6-c**** -- ls /data

      预期输出:

      nas

      nas文件仍然存在,表明NAS的数据可持久化保存。

验证NAS的共享存储

  1. 查看应用所在的Pod。

    kubectl get pod 

    预期输出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
    nas-static-c5bb4746c-4****    1/1     Running   0          32s
  2. 查看两个Pod的/data路径下的文件。

    kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
    kubectl exec nas-static-c5bb4746c-4**** -- ls /data

    无返回结果,说明当前存储路径/data下无文件。

  3. 在任意一个Pod 的/data路径下创建文件nas。

    以名为nas-static-5b5cdb85f6-n****的Pod为例。

     kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
  4. 查看两个Pod的/data路径下的文件。

    1. 查看其中一个名为nas-static-5b5cdb85f6-n****的Pod 的/data路径下的文件。

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      预期输出:

      nas
    2. 查看另一个名为nas-static-c5bb4746c-4****的Pod 的/data路径下的文件。

      kubectl exec nas-static-c5bb4746c-4**** -- ls /data

      预期输出:

      nas

      如果在任意一个Pod的/data下创建的文件,在两个Pod的/data路径下均存在此文件,表明两个Pod共享一个NAS。

相关文档