全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:通过CNFS管理NAS文件系统

更新时间:Dec 24, 2025

通过CNFS,可将阿里云NAS文件系统作为原生Kubernetes资源进行管理,为网站、数据分析等工作负载提供了更简单、高效的存储方案。

选择NAS文件系统的创建与接入方式

开始操作前,选择如何为集群提供NAS文件系统。

image

方式

说明

卷提供方式

适用场景

方式一:自动创建并使用NAS文件系统

CNFS自动创建并管理一个配置固定的NAS文件系统,实现快速挂载。

动态卷

  • 快速功能验证。

  • 无需关心底层存储配置,但配置较为固定,无法灵活选择存储类型、定义回收站保留时间等。

方式二:自定义参数创建并使用NAS文件系统

CNFS根据参数配置,创建一个全新的、可自定义的NAS文件系统。

  • 动态卷

  • 静态卷

对性能、加密、成本等有特定要求,或需要精细化管理存储。

方式三:纳管并使用已有的NAS文件系统

将已存在的NAS文件系统接入CNFS进行统一管理。

  • 动态卷

  • 静态卷

将已有NAS平滑接入集群。

准备工作

  • 已创建1.20以上版本的ACK托管集群Pro版。如需升级,请参见手动升级集群

    通过kubectl使用CNFS时,支持1.20版本。
  • csi-plugin、csi-provisioner、storage-operator的版本满足以下要求:

    如需升级,请参见组件
    • csi-plugin和csi-provisioner:v1.20.5-ff6490f-aliyun及以上版本。

    • storage-operator:v1.18.8.56-2aa33ba-aliyun及以上版本;通过控制台使用CNFS时需为v1.26.2-1de13b6-aliyun及以上版本。

  • 已开通文件存储NAS服务。NAS文件系统限制如下,详见使用限制

    首次登录时,按照页面引导开通服务。
    • 仅支持通用型NAS的容量型和性能型。

      不支持高级型和极速型NAS。
    • 每个账号在单个地域内可创建的NAS文件系统数量存在上限。

    • 如需对NAS文件系统进行KMS加密,需开通KMS服务,详见开通密钥管理服务

方式一:自动创建并使用NAS文件系统

通过CNFS可自动创建一个默认配置的NAS文件系统。CNFS会根据集群环境完成创建,默认不加密。若当前地域不支持容量型NAS,则自动使用性能型NAS。

kubectl

部署示例

以下YAML展示了应用(Deployment和StatefulSet)如何请求并挂载存储:通过PVC向StorageClass请求存储,该StorageClass基于关联的CNFS对象,在NAS中自动创建一个子目录作为PV并挂载至应用Pod。

展开查看YAML

# 创建CNFS、StorageClass和工作负载。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain  # 仅支持Retain,删除CNFS时不会删除后端的NAS实例。
  parameters:
    encryptType: SSE-KMS  # 可选:不指定表示对文件不启用NAS托管密钥,指定SSE-KMS表示启用。
    enableTrashCan: "true"  # 可选:不指定表示不开启回收站功能,指定true表示开启。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath # 每个PVC都会在NAS下创建一个独立的子目录。
  containerNetworkFileSystem: cnfs-nas-filesystem # 关联到上面定义的CNFS实例。
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定为true,允许对存储卷的目录配额进行扩容
allowVolumeExpansion: true 
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      storage: 70Gi  # 如果启用目录限额功能,此处storage值将作为该PVC对应子目录的配额。动态创建目录写入数据量最大为70 GiB。
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  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
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-nas-pvc
      volumes:
      - name: cnfs-nas-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-pvc
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-nas-sts
  labels:
    app: nginx
spec:
  serviceName: "nginx"
  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
        volumeMounts:
        - mountPath: "/data"
          name: www
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alibabacloud-cnfs-nas"
      resources:
        requests:
          storage: 50Gi  # 如果打开目录限额功能,则storage字段会生效,动态创建目录写入数据量最大为50 GiB。
EOF

CNFS的参数说明如下。

其余资源的参数说明,可参见使用NAS动态存储卷

参数

说明

description

当前CNFS的描述。

type

需要创建的存储卷类型,使用nas

reclaimPolicy

回收策略。当前仅支持Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。

parameters.encryptType

可选,是否启用加密方式

  • None:不加密。

  • SSE-KMS:启用NAS托管密钥,即使用NAS完全托管的密钥加密每个文件系统,该密钥由NAS在KMS中创建和管理。

parameters.enableTrashCan

是否开启回收站功能,避免误删除文件导致业务受阻或数据丢失。

  • true:开启。

  • false:不开启。

结果验证

  1. 检查PV和PVC状态。

    展开查看

    1. 检查PVC状态。

      kubectl get pvc

      预期输出中,所有PVC的STATUS均为 Bound,已与PV绑定。

      NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS            VOLUMEATTRIBUTESCLASS   AGE
      cnfs-nas-pvc         Bound    nas-bc418e70-0f21-475a-8821-7e811fa56fdc   70Gi       RWX            alibabacloud-cnfs-nas   <unset>                 41s
      www-cnfs-nas-sts-0   Bound    nas-3b0285dd-b705-4c68-84c7-9b07bb42f91b   50Gi       RWO            alibabacloud-cnfs-nas   <unset>                 41s
    2. 检查Pod状态。

      kubectl get pods -l app=nginx

      预期输出中,Pod运行状态正常。

      NAME                                  READY   STATUS    RESTARTS   AGE
      cnfs-nas-deployment-d4d56c479-*****   2/2     Running   0          78s
      cnfs-nas-deployment-d4d56c479-*****   2/2     Running   0          78s
      cnfs-nas-sts-0                        2/2     Running   0          78s
      cnfs-nas-sts-1                        2/2     Running   0          24s
  2. 验证Deployment的共享存储和持久化存储

  3. 验证StatefulSet的数据隔离和持久化存储

控制台

1. 创建CNFS

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 容器网络文件系统CNFS

  3. 单击创建容器网络文件系统,按照页面提示配置CNFS。

    • 选择NAS文件系统

    • 选择创建默认NAS

    • 按需开启全链路加速,以利用弹性加速特性进行挂载,优化数据访问性能,详情请参见通过CNFS使用EFC客户端挂载NAS

  4. 在CNFS列表,单击目标CNFS查看详情,然后单击NAS ID进入NAS文件系统详情页面。

  5. 单击挂载使用,在挂载点地址列查看目标挂载点的挂载点地址。

2. 创建StorageClass

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

  2. 存储类页面,单击创建,按照页面提示完成StorageClass的配置。

    主要配置项如下。详细说明请参见创建StorageClass

    配置项

    说明

    示例

    存储卷类型

    选择NAS

    NAS

    选择挂载点

    此前通过CNFS创建的默认NAS文件系统的挂载点地址。

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

    64888******-e*****.cn-qingdao.nas.aliyuncs.com

    挂载路径

    待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为/

    如果NAS中没有该目录,系统会自动创建并进行挂载。

    /

    回收策略

    回收策略。当前仅支持Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。

    Retain

3. 创建PVC

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

  2. 存储声明页面,单击创建,选择存储声明类型为NAS,按照页面提示完成PVC的配置。

    参数

    说明

    名称

    集群内保持唯一。

    分配模式

    存储卷使用方式。

    已有存储卷类

    单击选择存储类,选择此前创建的StorageClass。

    总量

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

    访问模式

    默认为ReadWriteMany,也可选择ReadWriteOnceReadOnlyMany

4. 创建应用并挂载NAS

创建Deployment创建StatefulSet时,在容器配置页面的数据卷区域,可以配置PVC挂载到容器。

以下示例表示将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。

image

方式二:自定义参数创建并使用NAS文件系统

通过CNFS可创建具有自定义参数的NAS文件系统。流程如下:

  1. 定义一个ContainerNetworkFileSystem资源,实例化一个新的NAS文件系统。

  2. 通过创建静态PV或动态StorageClass,将该文件系统暴露给集群内的应用进行挂载。

kubectl

1. 创建自定义的NAS文件系统

  1. 创建一个ContainerNetworkFileSystem资源,声明NAS的详细参数,如存储类型、加密方式、交换机等。

    cat <<EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nas-filesystem
    spec:
      description: "cnfs"
      type: nas
      reclaimPolicy: Retain
      parameters:
        filesystemType: standard
        storageType: Capacity
        protocolType: NFS
        encryptType: SSE-KMS
        enableTrashCan: "true"
        trashCanReservedDays: "5"
        vSwitchId: vsw-2ze9l3ppwzg6bl02j****
    EOF

    参数

    说明

    description

    当前CNFS的描述。

    type

    需要创建的存储卷类型,使用nas

    reclaimPolicy

    回收策略。当前仅支持Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。

    parameters.filesystemType

    文件系统类型。默认为通用型NASstandard

    parameters.storageType

    存储类型。通用型NAS可选择性能型Performance或容量型Capacity

    parameters.protocolType

    文件传输协议类型。目前仅支持NFS协议。

    parameters.encryptType

    可选,是否启用加密方式

    • None:不加密。

    • SSE-KMS:启用NAS托管密钥,即使用NAS完全托管的密钥加密每个文件系统,该密钥由NAS在KMS中创建和管理。

    parameters.enableTrashCan

    是否开启回收站功能,避免误删除文件导致业务受阻或数据丢失。

    • true:开启。

    • false:不开启。

    parameters.trashCanReservedDays

    表示回收站文件保留的最长时间,默认为7天。示例中trashCanReservedDays: 5表示回收站的文件最长保留5天。

    parameters.vSwitchId

    创建出的NAS文件系统需要使用的交换机ID。

    通用型NAS支持的地域和可用区,请参见地域 可用区

  2. 查看创建的NAS文件系统。

    kubectl get cnfs

    预期输出:

    NAME                  AGE
    cnfs-nas-filesystem   30s
  3. 查看NAS文件系统的详细信息。

    kubectl get cnfs/cnfs-nas-filesystem -o yaml

    完整的YAML说明,请参见CNFS YAML说明

2. 创建PV或StorageClass

创建CNFS后,选择应用如何接入并使用NAS。

  • 静态PV:手动将一个PV绑定到NAS上的已有目录,适用于需要访问特定存量数据的场景。

  • 动态StorageClass:创建一个StorageClass作为模板,让应用可以按需自动创建全新的独立子目录。

PV

关于PV参数的详细说明,请参见使用NAS静态存储卷
  1. 执行以下内容创建引用NAS文件系统的PV对象。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cnfs-nas-pv
      labels:
        alicloud-pvname: cnfs-nas-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeHandle: cnfs-nas-pv # 需与PV name保持一致。
        volumeAttributes:
          containerNetworkFileSystem: cnfs-nas-filesystem
          path: "/"
      mountOptions:
        - nolock,tcp,noresvport
        - vers=3
    EOF

    参数

    说明

    containerNetworkFileSystem

    指定需要使用的CNFS名称。

    path

    挂载存储卷在CNFS中使用的路径。

  2. 查看PV是否创建成功。

    kubectl get pv

    预期输出:

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

StorageClass

关于StorageClass参数的详细说明,请参见使用NAS动态存储卷

创建引用NAS文件系统的StorageClass。

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-nas-cnfs
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  containerNetworkFileSystem: cnfs-nas-filesystem
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定为true,允许对存储卷的目录配额进行扩容
allowVolumeExpansion: true
EOF

3. 创建PVC

关于PVC参数的详细说明,请参见创建PVC

根据此前创建的静态PV和动态StorageClass,创建引用NAS文件系统的PVC。

PV

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: cnfs-nas-pv   # 通过标签精确匹配此前创建的PV
EOF

StorageClass

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: cnfs-nas-pvc
spec:
  accessModes:
  - ReadWriteMany 
  storageClassName: alibabacloud-nas-cnfs
  resources: 
    requests:
      storage: 70Gi
EOF

4. 创建应用并挂载NAS

PVC创建后,将其绑定的 PV 挂载到应用中。

  1. 创建引用PVC的应用。

    cat <<EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnfs-nas-deployment
      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: cnfs-nas-pvc
                  mountPath: "/data"
          volumes:
            - name: cnfs-nas-pvc
              persistentVolumeClaim:
                claimName: cnfs-nas-pvc
    EOF
  2. 查看所创建应用的工作状态。

    kubectl get pod -l app=nginx

    预期输出中,Pod状态正常,CNFS成功将NAS文件系统挂载到Pod中。

    NAME                             READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-86959b****   1/1     Running   0          30s
    cnfs-nas-deployment-869ajk****   1/1     Running   0          30s
  3. 验证Deployment的共享存储和持久化存储

控制台

1. 创建CNFS

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 容器网络文件系统CNFS

  3. 单击创建容器网络文件系统,按照页面提示配置CNFS。

2. 创建PV或StorageClass

通过创建静态PV或动态存储类StorageClass来绑定NAS文件系统。

PV

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

  2. 单击创建,选择存储卷类型为NAS,按照页面提示完成PV的配置。

    主要配置项如下。详细配置项说明,请参见创建PV

    配置项

    说明

    总量

    PV容量声明。此声明仅为PVC匹配依据,不限制实际可用容量。应用实际可用存储上限为NAS文件系统总容量。

    NAS实际容量上限由其规格决定,请参见通用型NAS

    是否使用CNFS

    是否启用CNFS。

    选择CNFS

    开启CNFS功能后,选择此前创建的CNFS。

    高级选项(选填)

    • 挂载路径

      待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为/

      如果NAS中没有该目录,系统会自动创建并进行挂载。
    • 回收策略:CNFS仅支持Retain

    • 开启CNFS加速:开启CNFS加速功能,详情请参见通过CNFS使用EFC客户端挂载NAS

StorageClass

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

  2. 存储类页面,单击创建,按照页面提示完成StorageClass的配置。

    主要配置项如下。详细说明请参见创建StorageClass

    配置项

    说明

    示例

    存储卷类型

    选择NAS

    NAS

    选择挂载点

    此前通过CNFS创建的默认NAS文件系统的挂载点地址。

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

    64888******-e*****.cn-qingdao.nas.aliyuncs.com

    挂载路径

    待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为/

    如果NAS中没有该目录,系统会自动创建并进行挂载。

    /

    回收策略

    回收策略。当前仅支持Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。

    Retain

3. 创建PVC

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

  2. 存储声明页面,单击创建,选择存储声明类型为NAS,按照页面提示完成PVC的配置。

    参数

    说明

    名称

    集群内保持唯一。

    分配模式

    存储卷使用方式。

    已有存储卷类

    单击选择存储类,选择此前创建的StorageClass。

    总量

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

    访问模式

    默认为ReadWriteMany,也可选择ReadWriteOnceReadOnlyMany

4. 创建应用并挂载NAS

创建Deployment创建StatefulSet时,在容器配置页面的数据卷区域,可以配置PVC挂载到容器。

以下示例表示将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。

image

方式三:纳管并使用已有的NAS文件系统

通过CNFS可纳管一个已存在的NAS文件系统,并将其接入集群供应用进行挂载和使用。

kubectl

1. 使用已有NAS创建CNFS

  1. 创建一个ContainerNetworkFileSystem资源,引用NAS挂载点。

    # 当NAS文件系统存在时,加载已创建的NAS文件系统。
    cat <<EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nas-filesystem
    spec:
      description: "cnfs"
      type: nas
      reclaimPolicy: Retain
      parameters:
        server: 17f7e4****-h****.cn-beijing.nas.aliyuncs.com
    EOF

    参数

    说明

    description

    当前文件系统的简单描述。

    type

    需要创建的存储类型。

    reclaimPolicy

    回收策略。当前仅支持Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。

    parameters.server

    NAS的挂载点地址。

  2. 查看NAS文件系统。

    kubectl get cnfs

    预期输出:

    NAME                  AGE
    cnfs-nas-filesystem   10s
  3. 查看NAS文件系统的详细信息。

    kubectl get cnfs/cnfs-nas-filesystem -o yaml

    完整的YAML说明,可参见CNFS YAML说明

2. 在应用中挂载NAS

在应用中基于CNFS使用NAS存储卷的流程与方式二:自定义参数创建并使用NAS文件系统类似。请参见:

控制台

1. 使用已有NAS创建CNFS

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 容器网络文件系统CNFS

  3. 单击创建容器网络文件系统,按照页面提示配置CNFS。

  4. 创建容器网络文件系统面板,配置相关参数后,单击确定

    • 选择NAS文件系统。

    • 选择选择已有NAS,在下拉列表中选择已有的NAS挂载点。

    • 按需开启全链路加速,以利用弹性加速特性进行挂载,优化数据访问性能,详情请参见通过CNFS使用EFC客户端挂载NAS

2. 在应用中挂载NAS

在应用中基于CNFS使用NAS存储卷的流程与方式二:自定义参数创建并使用NAS文件系统类似。请参见:

生产环境使用建议

维度

说明

数据安全

数据加密:创建新的NAS文件系统时,可在CNFS资源中设置encryptType: SSE-KMS,启用NAS服务端的静态数据加密。

运维管理

  • 数据保护:CNFS的回收策略reclaimPolicy固定为Retain,删除K8s中的存储对象不会删除后端的NAS实例和数据,这是防止误操作的重要保障。

  • 容量管理:在StorageClass中设置allowVolumeExpansion: true后,允许对存储卷的目录配额进行扩容。

  • 监控与告警:利用容器存储监控配置告警,及时发现容量或性能瓶颈。

成本优化

  • 按需选择存储类型:参见选型指导合理选择NAS类型,例如容量型价格较低,适合成本敏感型且对时延响应要求不高的文件共享业务。

  • 及时释放资源:应用下线后,务必删除不再使用的资源,避免产生闲置费用。

参考信息

验证共享存储、数据隔离、持久化存储

NAS挂载完成后,可进一步验证存储行为是否符合预期。

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

展开查看

共享存储

持久化存储

在一个Pod中创建文件,然后另一个Pod中查看文件,验证数据的共享存储。

  1. 查看Pod信息,获取Pod名称。

    kubectl get pod | grep cnfs-nas-deployment

    预期输出:

    cnfs-nas-deployment-*****a 1/1 Running 0 40s
    cnfs-nas-deployment-*****b 1/1 Running 0 40s
  2. 在一个Pod中创建文件。 以名为cnfs-nas-deployment-*****a的Pod作为示例:

    kubectl exec cnfs-nas-deployment-*****a -- touch /data/test.txt
  3. 在另一个Pod中查看文件是否存在。 以名为cnfs-nas-deployment-*****b的Pod为例。

    kubectl exec cnfs-nas-deployment-*****b -- ls /data

    预期输出:

    test.txt

    可以查看到此前新建的文件,表明数据可在多Pod间共享。

重建Deployment,在新建Pod中查看文件系统中的数据是否存在,验证数据的持久化存储。

  1. 删除应用Pod以触发重建。

    kubectl rollout restart deploy cnfs-nas-deployment
  2. 查看Pod,等待新Pod启动并进入Running状态。

    kubectl get pod | grep cnfs-nas-deployment

    预期输出:

    cnfs-nas-deployment-*****c 1/1 Running 0 67s
    cnfs-nas-deployment-*****d 1/1 Running 0 49s
  3. 在新Pod中查看此前创建的文件是否存在。 以名为cnfs-nas-deployment-*****c的Pod为例。

    kubectl exec cnfs-nas-deployment-*****c -- ls /data

    预期输出:

    test.txt

    可以查看到此前写入的文件,表明数据可持久化存储。

验证StatefulSet的数据隔离和持久化存储

展开查看

StatefulSet的每个Pod有独立的PVC,数据保持隔离。

数据隔离

持久化存储

在一个Pod中创建文件,然后在另一个Pod中确认该文件不存在,验证各Pod间存储卷的数据隔离性。

  1. 查看Pod信息,获取Pod名称。

    kubectl get pod | grep cnfs-nas-sts

    预期输出:

    cnfs-nas-sts-0 1/1 Running 0 5m
    cnfs-nas-sts-1 1/1 Running 0 5m
  2. 在一个Pod中创建文件。 以名为cnfs-nas-sts-0的Pod作为示例,创建一个可识别的文件:

    kubectl exec cnfs-nas-sts-0 -- touch /data/sts-0-data.txt
  3. 在另一个Pod中查看该文件是否存在。 以名为cnfs-nas-sts-1的Pod为例。

    kubectl exec cnfs-nas-sts-1 -- ls /data

    预期输出中,未查看到cnfs-nas-sts-0中创建的文件,表明每个StatefulSet Pod使用独立的存储卷,数据是相互隔离的。

删除指定Pod并等待其重建,在新Pod中查看数据是否存在。

  1. 删除指定Pod以触发重建。 以cnfs-nas-sts-0为例:

    kubectl delete pod cnfs-nas-sts-0
  2. 查看Pod,等待同名Pod启动并进入Running状态。StatefulSet会重新创建一个具有相同名称和身份的Pod。

    kubectl get pod | grep cnfs-nas-sts

    预期输出:

    cnfs-nas-sts-0                        2/2     Running   0          19s
    cnfs-nas-sts-1                        2/2     Running   0          102s
  3. 在新Pod中查看此前创建的文件是否存在。

    kubectl exec cnfs-nas-sts-0 -- ls /data

    预期输出中可查看此前写入的文件,持久化存储成功。

    sts-0-data.txt

CNFS YAML说明

执行kubectl get cnfs/<cnfsName> -o yaml查看CNFS YAML时,可查看CNFS对象的全部配置和实时状态。

此处以方式二中执行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看cnfs-nas-filesystem YAML为例。

YAML示例

展开查看

apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"storage.alibabacloud.com/v1beta1","kind":"ContainerNetworkFileSystem","metadata":{"annotations":{},"name":"cnfs-nas-filesystem"},"spec":{"description":"cnfs","parameters":{"encryptType":"SSE-KMS","enableTrashCan":"true","filesystemType":"standard","protocolType":"NFS","storageType":"Capacity","trashCanReservedDays":"5","vSwitchId":"vsw-2ze9l3ppwzg6bl02j****"},"reclaimPolicy":"Retain","type":"nas"}}
  creationTimestamp: "20**-05-14T08:20:09Z"
  finalizers:
  - protection.alibabacloud.com/cnfs
  generation: 6
  name: cnfs-nas-filesystem
  resourceVersion: "122342382"
  uid: a9e9650c-68b2-405b-8274-0f5b6063****
spec:
  description: "cnfs"
  reclaimPolicy: Retain
  type: nas
  parameters:
    encryptType: SSE-KMS
    enableTrashCan: "true"
    filesystemType: standard
    protocolType: NFS
    storageType: Capacity
    trashCanReservedDays: "5"
    vSwitchId: vsw-2ze9l3ppwzg6bl02j****
status:
  conditions:
  - lastProbeTime: "20**-05-14 16:20:15"
    reason: The nas filesystem and mount target complete initialization.
    status: Ready
  fsAttributes:
    accessGroupName: DEFAULT_VPC_GROUP_NAME
    encryptType: SSE-KMS
    enableTrashCan: "true"
    filesystemId: 17f7e48ece
    filesystemType: standard
    protocolType: NFS
    regionId: cn-beijing
    server: 17f7e48ece-h****.cn-beijing.nas.aliyuncs.com
    storageType: Capacity
    vSwitchId: vsw-2ze9l3ppwzg6bl02j****
    vpcId: vpc-2ze9sgmehjvwv5x74****
    zoneId: cn-beijing-h
  status: Available

参数说明

展开查看

参数

说明

status

CNFS的当前状态,包括Pending(等待)、Creating(创建中)、Initialization(创建文件系统中)、Available(可用)、Unavailable(暂时不可用,可以恢复为可用状态)、Fatal(不可用,无法恢复)、Terminating(删除中)。

conditions.lastProbeTime

最后探活的时间。

conditions.reason

处于当前状态的原因。

conditions.status

当前状态是否可用,可用为Ready,不可用为NotReady

fsAttributes.accessGroupName

挂载点所应用的权限组名称,目前仅支持DEFAULT_VPC_GROUP_NAME(专有网络默认权限组)。

fsAttributes.encryptType

可选,是否启用加密方式

  • None:不加密。

  • SSE-KMS:启用NAS托管密钥,即使用NAS完全托管的密钥加密每个文件系统,该密钥由NAS在KMS中创建和管理。

fsAttributes.enableTrashCan

是否开启回收站功能,避免误删除文件导致业务受阻或数据丢失。

  • true:开启。

  • false:不开启。

fsAttributes.filesystemId

文件系统ID。

fsAttributes.filesystemType

文件系统类型。默认为通用型NASstandard

fsAttributes.protocolType

文件传输协议类型。目前仅支持NFS协议

fsAttributes.regionId

CNFS所在的地域。

fsAttributes.server

NAS的挂载点地址。

fsAttributes.storageType

存储类型。通用型NAS可选择性能型Performance或容量型Capacity

fsAttributes.vSwitchId

CNFS使用的vSwitch。

fsAttributes.vpcId

CNFS所在的VPC。

fsAttributes.zoneId

CNFS所在的可用区。