NAS存储卷提供数据持久化(Pod重建后数据不丢失)和数据共享(多Pod同时读写)能力。ACK支持将已有的NAS文件系统,以静态存储卷的方式挂载给工作负载使用。
静态存储卷:需预先创建PV来代表已有的存储资源(如NAS文件系统)。应用通过创建PVC来“匹配”并申请使用此PV。常用于纳管存量存储资源。但其绑定的PVC默认不支持在线扩容。
如需使用存储卷自动扩容,请选择使用NAS动态存储卷或使用CNFS自动扩容NAS存储卷。
动态存储卷:无需预先创建PV。应用创建PVC时,系统会根据PVC指定的StorageClass,按需自动创建一个全新的存储卷及与之对应的PV。此模式更灵活,且支持存储卷扩容。
流程指引
在ACK集群中挂载NAS静态存储卷主要流程如下。
|
准备工作
已安装csi-plugin组件和csi-provisioner组件。
CSI组件默认安装,请确保未手动卸载。可在页面查看安装情况。建议升级CSI组件至最新版本。
已创建NAS文件系统,且满足以下条件。否则请重新创建文件系统或者使用NAS动态存储卷。
NAS在挂载连通性、文件系统数量、协议类型等方面存在使用限制。
协议类型:仅支持NFS。
专有网络VPC:NAS文件系统需与集群VPC保持一致。NAS支持跨可用区挂载,不支持跨VPC挂载。
挂载点:添加与集群处于同一VPC内且状态可用的挂载点,具体操作请参见管理挂载点。请记录挂载点地址。
(可选)加密类型:如需加密存储卷数据,请在创建NAS文件系统时配置加密类型。
注意事项
禁止删除挂载点:存储卷使用期间,请勿在NAS控制台删除其对应的挂载点,以免导致节点I/O异常。
并发写入:NAS为共享存储。当多个Pod同时挂载一个存储卷时,应用自身需要处理并发写入可能带来的数据一致性问题。
关于NAS并发写入的一些限制条件,请参见如何避免多进程或多客户端并发写同一日志文件可能出现的异常?和读写访问文件类问题。
挂载性能:若在应用中配置了
securityContext.fsgroup,kubelet会在挂载后递归执行chmod或chown操作,可能导致Pod启动时间显著延长。如需优化,请参见NAS存储卷FAQ。
步骤一:创建PV
创建PV,在集群中“注册”已有的NAS文件系统。
kubectl
参见以下内容创建
pv-nas.yaml文件。apiVersion: v1 kind: PersistentVolume metadata: # PV名称,需在集群内保持唯一 name: pv-nas # PV标签,用于后续匹配PVC labels: alicloud-pvname: pv-nas spec: capacity: # 容量声明仅作标识,实际容量由NAS文件系统决定 storage: 5Gi accessModes: - ReadWriteMany # PV回收策略 persistentVolumeReclaimPolicy: Retain csi: # 驱动类型,使用NAS存储卷时固定为此值 driver: nasplugin.csi.alibabacloud.com # 需与 metadata.name 保持一致 volumeHandle: pv-nas volumeAttributes: server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com" # 替换为NAS挂载点地址 # 待挂载的NAS子目录,若不存在会自动创建 path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3参数
说明
storagePV容量声明。此声明仅为PVC匹配依据,不限制实际可用容量。应用实际可用存储上限为NAS文件系统总容量。
NAS实际容量上限由其规格决定,请参见通用型NAS和极速型NAS。
accessModes配置访问模式。可取值:
ReadWriteMany(默认):多节点读写。ReadWriteOnce:单节点读写。ReadOnlyMany:多节点只读。
persistentVolumeReclaimPolicyPV的回收策略,即PVC被删除后如何处理对应的PV及后端NAS数据。
Retain(推荐):删除PVC后,PV进入Released状态,后端NAS数据被完整保留,需手动删除。Delete:删除PVC后,PV也会被删除。需配合archiveOnDelete一起使用。静态PV不支持archiveOnDelete,即使配置为Delete,删除PVC时也不会真正删除PV和NAS文件。如需配置
archiveOnDelete,请参见使用NAS动态存储卷。
driver驱动类型。使用阿里云NAS CSI组件时固定为
nasplugin.csi.alibabacloud.com。volumeHandlePV在后端存储系统中的唯一标识符,需与PV Name(即
metadata.name)保持一致。如需同时使用多个PV,则各个PV中该值须唯一。serverNAS挂载点地址。
关于如何查看挂载点地址,请参见管理挂载点。
path待挂载的NAS子目录。如果未设置,则默认挂载到根目录。
如果NAS中没有该目录,系统会自动创建并进行挂载。
通用型NAS:根目录为
/。极速型NAS:根目录为
/share。挂载子目录时,path需以/share开头(如/share/data)。
mountOptionsNAS的挂载参数,包括NFS协议版本等。默认使用v3协议挂载,可通过
vers=4.0方式指定协议版本。关于不同NAS类型支持的NFS协议,请参见NFS协议。创建PV。
kubectl create -f pv-nas.yaml查看PV状态和属性。
kubectl get pv预期输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-nas 5Gi RWX Retain Available <unset> 25s预期输出表明,PV 已成功创建,容量为 5Gi,当前处于Available状态,即未被任何应用通过 PVC 占用。
控制台
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在存储卷页面,单击创建,在弹出的对话框完成参数配置,然后单击创建。
配置项
说明
存储卷类型
选择NAS。
名称
PV名称,在集群内保持唯一。
总量
PV容量声明。此声明仅为PVC匹配依据,不限制实际可用容量。应用实际可用存储上限为NAS文件系统总容量。
NAS实际容量上限由其规格决定,请参见通用型NAS和极速型NAS。
访问模式
配置访问模式。可取值:
ReadWriteMany:多节点读写。
ReadWriteOnce:单节点读写。
是否使用CNFS
是否使用容器网络文件系统CNFS,利用其在自动化运维、缓存加速、性能监控等方面提供的增强能力。
如需使用CNFS管理已有NAS,请参见创建CNFS管理NAS文件系统(推荐)。
挂载点域名
未开启CNFS时可配置
NAS挂载点地址。
如需获取地址,请参见管理挂载点。
选择挂载点:选择此前添加的挂载点地址。
自定义:使用自定义域名作为挂载地址。请确保已完成自定义域名到目标NAS挂载点的解析配置。
高级选项(选填)
挂载路径
待挂载的NAS子目录。如果未设置,则默认挂载到根目录。
如果NAS中没有该目录,系统会自动创建并进行挂载。
通用型NAS:根目录为
/。极速型NAS:根目录为
/share。挂载子目录时,path需以/share开头(如/share/data)。
回收策略
Retain(默认):删除PVC时,PV和NAS文件不会被删除,需手动删除。
删除:删除PVC后,PV也会被删除。需配合
archiveOnDelete一起使用。静态PV不支持archiveOnDelete,即使配置为Delete,删除PVC时也不会真正删除PV和NAS文件。如需配置
archiveOnDelete,请参见使用NAS动态存储卷。
挂载选项
NAS的挂载参数,包括NFS协议版本等。默认使用v3协议挂载,可通过
vers=4.0方式指定协议版本。关于不同NAS类型支持的NFS协议,请参见NFS协议。标签
PV的标签。
创建完成后,可在存储卷页面查看新创建的PV。
步骤二:创建PVC
创建PVC,为应用声明其所需的持久化存储容量。
kubectl
创建pvc-nas.yaml文件,关联此前创建的PV。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas # PVC名称,需在命名空间内保持唯一 spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas # 通过标签精确匹配此前创建的PV参数
说明
accessModes访问模式。可取值:
ReadWriteMany(默认):多节点读写。ReadWriteOnce:单节点读写。ReadOnlyMany:多节点只读。
storage声明所需使用的存储卷的容量。此处声明的所需容量仅为 PV 匹配的依据,并非实际容量的限制。
NAS实际容量上限由规格决定,请参见通用型NAS和极速型NAS确认。
matchLabels输入PV标签,用于关联PV。
创建PVC。
kubectl create -f pvc-nas.yaml查看PVC状态。
kubectl get pvc预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-nas Bound pv-nas 5Gi RWX <unset> 5s预期输出表明,PVC已成功分配5Gi的存储容量,绑定(Bound)到名为 pv-nas 的PV上,可被应用挂载和使用。
控制台
步骤三:创建应用并挂载NAS
PVC创建后,可将其绑定的 PV 挂载到应用中。
kubectl
参见以下内容创建
deploy.yaml,引用此前创建的PVC。该应用会创建2个Pod,挂载至同一NAS文件系统,以便后续验证NAS的共享存储。
创建Deployment。
kubectl create -f deploy.yaml查看应用Pod部署情况。
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
控制台
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在无状态页面,单击使用镜像创建,按照页面提示完成应用的配置。
主要参数如下,其他参数保持默认即可,详见创建无状态工作负载Deployment。
配置项
参数
说明
应用基本信息
应用名称
Deployment名称。
副本数量
Deployment的副本数量。
多个副本会挂载至同一NAS文件系统,以便后续验证NAS的共享存储。
容器配置
镜像名称
应用镜像地址。
所需资源
所需的vCPU和内存资源。
数据卷
单击增加云存储声明(PersistentVolumeClaim),完成参数配置。
挂载源:此前创建的PVC。
容器路径:NAS文件系统需要挂载到的容器路径,如/data。
部署后,可在无状态页面单击应用名称,在容器组页签下确认Pod已正常运行(状态为Running)。
验证共享存储和持久化存储
成功部署应用后,可验证存储卷是否按预期工作。
共享存储 | 持久化存储 |
在一个Pod中创建文件,然后另一个Pod中查看,验证数据的共享存储。
| 重建Deployment,在新建Pod中查看文件系统中的数据是否存在,验证数据的持久化存储。
|
适用于生产环境
安全与权限管理
使用权限组进行访问控制:NAS通过权限组来管理网络访问权限。请遵循最小权限原则,在权限组中仅添加集群节点的私网IP地址或其所属的vSwitch网段,避免授权范围过大(如
0.0.0.0/0)。
性能与成本优化
选择合适的NAS类型:参见文件系统选型,根据应用对IOPS和吞吐量的要求合理选择NAS类型。
优化挂载选项 (
mountOptions):根据工作负载特性调整NFS挂载参数。例如,使用vers=4.0或vers=4.1协议版本可能在某些场景下获得更好的性能和文件锁定能力。对于大规模文件读写,可测试调整rsize和wsize参数以优化读写性能。
运维与可靠性
配置健康检查:为应用Pod配置存活探针(Liveness Probe),检查挂载点是否正常。当挂载失效时,ACK可自动重启Pod,触发存储卷的重新挂载。
监控与告警:利用容器存储监控配置告警,及时发现存储卷的异常或性能瓶颈。
使用
Retain回收策略:对于生产数据,将PV的persistentVolumeReclaimPolicy设置为Retain,防止因误删PVC而导致后端NAS文件系统中的数据被意外删除。
资源释放指引
为避免产生预期外费用,当您不再需要使用NAS存储卷时,请按照以下顺序释放相关资源。
删除工作负载
操作:删除所有使用该NAS存储卷的应用(如Deployment、StatefulSet等)。此操作将停止应用Pod对存储卷的挂载和读写。
命令示例:
kubectl delete deployment <your-deployment-name>
删除PVC
操作:删除应用所关联的PVC。删除后,其绑定PV的后续行为取决于该PV的
persistentVolumeReclaimPolicy。回收策略说明:
Retain(推荐):删除PVC后,其绑定的PV会进入Released(已释放)状态。PV对象和后端NAS数据都会被完整保留,需手动删除。Delete:删除PVC后,对应的PV对象会被删除。请注意:PV指向NAS根目录时,后端的NAS数据仍会保留,防止误删除。
当一个静态PV的
volumeHandle值是path值的后缀时(如volumeHandle为app,而path为/exports/app),删除PVC将触发后端NAS子目录的自动删除。请务必谨慎使用。
命令示例:
kubectl delete pvc <your-pvc-name>
删除PV
操作:当PV处于
Available或Released状态时,可执行删除操作。此操作仅从Kubernetes集群中移除该PV的定义,不会删除后端NAS文件系统上的数据。命令示例:
kubectl delete pv <your-pv-name>
删除后端NAS文件系统(可选)
操作:请参见删除文件系统。此操作将永久删除该NAS上的所有数据,且无法恢复,请谨慎操作。执行前,请务必确认该NAS已无任何业务依赖。
相关文档
在挂载和使用NAS存储卷的过程中,如果遇到问题,可参考以下文档进行排查。
通过CNFS可以实现对NAS文件系统的独立管理,提升NAS文件系统的性能和QoS控制。具体操作,请参见通过CNFS管理NAS文件系统。