文档

使用NAS静态存储卷

更新时间:

NAS存储卷是一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统。本文介绍如何使用阿里云NAS静态存储卷,以及如何实现持久化存储与共享存储。

前提条件

  • 已创建ACS集群。具体操作,请参见创建ACS集群

  • 已开通NAS并创建NAS文件系统。具体操作,请参见创建文件系统

    说明

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

  • 已创建NAS挂载点。具体操作,请参见管理挂载点

    说明

    NAS挂载点需要和集群节点在同一个VPC内。

使用场景

  • 适用于对磁盘I/O要求较高的应用。

  • 选用持久化数据存储时,NAS读写性能相对于对象存储OSS高。

  • 可作为文件服务器实现跨主机文件共享。

注意事项

  • NAS支持同时被多个Pod挂载,此时多个Pod可能同时修改相同数据,需要应用自行实现数据的同步。

    说明

    NAS存储的/目录不支持修改权限、属主和属组。

  • 目前不支持在应用模板中配置securityContext.fsgroup参数,可能会造成挂载失败。

  • 目前使用NAS动态卷时,仅支持以filesystem的方式使用,共享目录为NAS的根目录(/)。

  • CSI插件不支持SMB挂载。

  • 数据卷挂载协议推荐使用NFSv3。

  • NAS卷只能挂载到相同VPC的ECS实例,不支持不同VPC网络的挂载。

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

  • 使用NAS数据卷前,建议将CSI存储插件升级到最新版本。

  • NAS挂载点创建后,等待一定时间,待挂载点状态可用后方可使用。

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

不同方式创建NAS静态存储卷

通过控制台的方式创建NAS静态存储卷

步骤一:获取ACS集群的地域和可用区信息

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

  2. 在集群列表页面,选择目标集群。

  3. 在集群管理页左侧导航栏,选择集群信息

  4. 集群信息页面,单击集群资源标签。

  5. 记录ACS集群的“虚拟专有网络 VPC”和“Pod 虚拟交换机”信息,并且分别点击查看它们的详情,记录下它们的ID和名称,以及地域和可用区信息。

image.png

步骤二:创建NAS文件系统和挂载点

  1. 登录NAS文件系统控制台

  2. 点击页面下方“创建通用型NAS”的按钮。

  3. 配置创建通用型NAS的各个选项,其中:

    1. 地域与ACS集群的地域保持一致;

    2. 可用区建议与步骤一中的ACS集群所在可用区保持一致;

    3. 存储规格根据您的自身需求选择即可;

    4. 协议类型选择NFS;

    5. 专有网络选择与ACS集群一致的VPC。注意这里选择的是专有网络的名称,而非ID;

    6. 虚拟交换机建议选择位于上述可用区的交换机。这里选择的同样是虚拟交换机的名称,而非ID;

  4. 创建NAS文件系统后,在集群管理页左侧导航栏,选择文件系统 > 文件系统列表,点击刚才自己创建的文件系统查看详情。

  5. 在文件系统详情页左侧导航栏,选择挂载使用,点击添加挂载点按钮查看挂载点,等待其状态变为可用。

image.png

说明

如果要创建极速型NAS,则需要先创建文件系统,然后进入文件系统添加挂载点。关于专有网络和虚拟交换机等参数选择请同样遵循上述说明。

步骤三:创建PVC

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

  2. 在集群列表页面,选择目标集群。

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

  4. 存储声明页面,单击右上角的创建

  5. 在弹出的创建存储声明页面中,填写界面参数。

    参数

    说明

    存储声明类型

    支持云盘和NAS两种云存储类型。 本文中选择NAS。

    名称

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

    分配模式

    选择使用挂载点域名创建。

    总量

    所创建存储卷的容量。

    说明

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

    挂载点域名

    填写步骤二中获取的挂载点域名,默认共享目录为NAS的根目录(/)。

    重要
    • 如果希望共享subpath子目录,或步骤二中创建的是极速型NAS,则需要通过kubectl命令行的方式完成。

    • 极速型NAS的共享目录必须以/share开头,例如:/share/share/subdir

  6. 单击创建

    创建成功后可以在列表中看到创建的存储声明,状态为Pending,等待Pod消费。

image

步骤四:创建应用

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

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

  3. 配置创建应用的参数信息。

    以下主要为您介绍数据卷的配置。关于其他参数的描述,请参见创建无状态工作负载Deployment

    ACS数据卷支持配置本地存储和云存储。

    • 本地存储:支持配置项(ConfigMap)、保密字典(Secret)和临时目录(EmptyDir),将对应的挂载源挂载到容器路径中。更多信息,请参见Volumes

    • 云存储:支持云存储类型。

    本例中配置了一个NAS类型的数据卷,将该NAS存储卷挂载到容器中/tmp路径下。

    image.png

  4. 所有的信息都配置完成后,单击创建

    创建成功后,就可以正常使用数据卷了。

通过kubectl命令行方式创建NAS静态存储卷

前提条件:已使用kubectl连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

步骤一:创建静态PVC。

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

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
      annotations:
        csi.alibabacloud.com/mountpoint: ****.nas.aliyuncs.com
        csi.alibabacloud.com/mount-options: nolock,tcp,noresvport
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 20Gi
      storageClassName: alibaba-cloud-nas

    参数

    说明

    name

    PVC的名称。

    metadata.annotations.csi.alibabacloud.com/mountpoint

    挂载点地址,用于关联之前创建的NAS文件系统。

    重要

    如果填写的是****.nas.aliyuncs.com,则表示共享的目录为NAS的根目录(/);如果填写的是****.nas.aliyuncs.com:/dir,则表示共享的目录为NAS的/dir目录,/dir目录不存在会自动新建。

    metadata.annotations.csi.alibabacloud.com/mount-options

    挂载参数, 默认为空。

    accessModes

    配置访问模式。

    storage

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

  2. 执行以下命令创建静态PVC。

    kubectl create -f pvc-nas.yaml

步骤二:创建名为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: nginx
            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
  3. 执行以下命令,查看Pod信息。

    kubectl get pod

    预期输出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-785b747ddf-q****   1/1     Running   0          32s
    nas-static-785b747ddf-z****   1/1     Running   0          32s

验证NAS的持久化存储

  1. 查看部署应用和NAS文件。

    1. 执行以下命令,查看部署的应用名称。

      kubectl get pod 

      预期输出:

      NAME                          READY   STATUS    RESTARTS   AGE
      nas-static-785b747ddf-q****   1/1     Running   0          32s
      nas-static-785b747ddf-z****   1/1     Running   0          32s
    2. 执行以下命令,查看任意一个应用的/data路径下的文件,本文以名为nas-static-785b747ddf-q****的Pod为例。

      kubectl exec nas-static-785b747ddf-q**** -- ls /data

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

  2. 执行以下命令,在名为nas-static-785b747ddf-q****Pod的/data路径下创建文件nas

    kubectl exec nas-static-785b747ddf-q**** -- touch /data/nas
  3. 执行以下命令,查看名为nas-static-5b5cdb85f6-n****Pod的/data路径下的文件。

    kubectl exec nas-static-785b747ddf-q**** -- ls /data

    预期输出:

    nas
  4. 执行以下命令,删除Pod。

    kubectl delete pod nas-static-785b747ddf-q****
  5. 同时在另一个窗口中,执行以下命令,查看Pod删除及Kubernetes重建Pod的过程。

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

    1. 执行以下命令,查看Kubernetes重建的Pod名称。

      kubectl get pod

      预期输出:

      NAME                          READY   STATUS    RESTARTS   AGE
      nas-static-785b747ddf-6****   1/1     Running   0          25s
      nas-static-785b747ddf-z****   1/1     Running   0          2m
    2. 执行以下命令,查看名为nas-static-785b747ddf-6****的Pod /data路径下的文件。

      kubectl exec nas-static-785b747ddf-6**** -- ls /data

      预期输出:

      nas

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

验证NAS的共享存储

  1. 查看部署的应用所在的Pod和NAS文件。

    1. 执行以下命令,查看应用所在Pod的名称。

      kubectl get pod 

      预期输出:

      NAME                          READY   STATUS    RESTARTS   AGE
      nas-static-785b747ddf-6****   1/1     Running   0          25s
      nas-static-785b747ddf-z****   1/1     Running   0          2m
    2. 执行以下命令,查看2个Pod/data路径下的文件。

      kubectl exec nas-static-785b747ddf-6**** -- ls /data
      kubectl exec nas-static-785b747ddf-z**** -- ls /data
  2. 执行以下命令,在任意一个Pod的/data路径下创建文件nas

     kubectl exec nas-static-785b747ddf-6**** -- touch /data/nas
  3. 执行以下命令,查看2个Pod /data路径下的文件。

    1. 执行以下命令,查看名为nas-static-785b747ddf-6****的Pod /data路径下的文件。

      kubectl exec nas-static-785b747ddf-6**** -- ls /data

      预期输出:

      nas
    2. 执行以下命令,查看名为nas-static-785b747ddf-z****的Pod/data路径下的文件。

      kubectl exec nas-static-785b747ddf-z**** -- ls /data

      预期输出:

      nas

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

  • 本页导读