本方案实现的动态 NAS 卷,是在某个 NAS 文件系统下通过创建子目录并把子目录映射为一个动态 PV 提供给应用。

# 前提条件

使用此方案,需要在集群中部署 Flexvolume 驱动(Kubernetes 集群默认已部署该驱动)。
您已经部署了 alicloud-nas-controller。请参见 安装与升级 Flexvolume 组件 (opens new window)

# 创建动态 NAS 卷

  1. 配置 StorageClass。 配置示例如下:

     apiVersion: storage.k8s.io/v1
     kind: StorageClass
     metadata:
       name: alicloud-nas
     mountOptions:
     - nolock,tcp,noresvport
     - vers=3
     parameters:
       server: "23a9649583-iaq37.cn-shenzhen.nas.aliyuncs.com:/nasroot1/"
       driver: flexvolume
     provisioner: alicloud/nas
     reclaimPolicy: Delete
    

    说明

    • mountOptions:表示生成的 PV options 配置,挂载 NAS 卷时使用这个 options 挂载。
    • server:表示生成目标 PV 所使用 NAS 挂载点列表。格式为 nfsurl1:/path1,nfsurl2:/path2;当配置多个 server 时,通过此 StorageClass 创建的 PV 会轮询使用上述 server 作为配置参数;极速 NAS 配置路径需要以/share 开头。
    • driver:支持 Flexvolume、NFS 两种驱动,默认为 NFS。
    • reclaimPolicy:PV 的回收策略,建议配置为 Retain。
      • 当配置为 Delete 时,删除 PV 后 NAS 文件系统中的对应目录会默认修改名字(例如,path-name 会被修改为 archived-path-name)。
      • 如果需要删除文件系统中对应的存储目录,可在 StorageClass 中配置 archiveOnDelete 为 false。
  2. 使用动态卷

     apiVersion: v1
     kind: Service
     metadata:
       name: nginx
       labels:
         app: nginx
     spec:
       ports:
     - port: 80
       name: web
     clusterIP: None
     selector:
       app: nginx
     ---
     apiVersion: apps/v1
     kind: StatefulSet
     metadata:
       name: web
     spec:
       serviceName: "nginx"
       replicas: 5
       volumeClaimTemplates:
       - metadata:
         name: html
       spec:
         accessModes:
           - ReadWriteOnce
       storageClassName: alicloud-nas
       resources:
         requests:
           storage: 2Gi
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:alpine
           volumeMounts:
           - mountPath: "/data"
             name: html