容器计算服务CSI支持Filesystem方式的NAS动态存储卷挂载,您可以通过容器计算服务控制台或kubectl两种方式进行挂载。本文介绍如何使用阿里云NAS动态存储卷,以及如何验证NAS存储卷的持久化存储与共享存储特性。
前提条件
使用场景
适用于对磁盘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动态存储卷
CSI插件支持使用Filesystem方式挂载NAS动态存储卷,您可以通过控制台和kubectl命令行两种方式进行操作。
Filesystem方式:仅支持通过kubectl命令行方式操作。
当您的Kubernetes应用需要动态创建和删除NAS文件系统和挂载点时,您可以使用Filesystem方式进行挂载。
通过kubectl使用filesystem类型的NAS动态存储卷
filesystem类型的NAS动态卷在删除时默认保留文件系统和挂载点,如需在释放PV资源的同时释放NAS文件系统和挂载点,则需要同时设置StorageClass中的reclaimPolicy
为Delete
且deleteVolume
的值为true
。
使用Filesystem类型NAS存储卷的Pod只能创建一个文件系统和一个挂载点,具体操作步骤如下。
创建StorageClass。
创建并复制以下内容到alicloud-nas-fs.yaml文件中。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-fs mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: filesystem fileSystemType: standard storageType: Performance regionId: cn-beijing zoneId: cn-beijing-e vpcId: "vpc-2ze2fxn6popm8c2mzm****" vSwitchId: "vsw-2zwdg25a2b4y5juy****" accessGroupName: DEFAULT_VPC_GROUP_NAME deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
参数
描述
volumeAs
定义创建数据的类型,仅支持filesystem类型:
filesystem表示Provisioner自动创建NAS文件系统,一个PV对应一个NAS文件系统。
fileSystemType
定义创建NAS文件系统的类型。可选standard和extreme两种类型:
standard:通用型NAS。
extreme:极速型NAS。
默认为通用型NAS。
storageType
定义创建NAS文件系统的存储规格类型。
当fileSystemType=standard时,可选Performance(性能型)和Capacity(容量型)两种类型,默认为性能型。
当fileSystemType=extreme时,可选standard(标准型)和advanced(高级型)两种类型,默认为标准型。
regionId
定义创建NAS文件系统所在地域。
zoneId
定义创建NAS文件系统所在可用区。
vpcId
定义创建NAS文件系统对应挂载点所在VPC。
vSwitchId
定义创建NAS文件系统对应挂载点所在vSwitch ID。
accessGroupName
定义创建NAS文件系统对应挂载点所用的AccessGroup。默认为DEFAULT_VPC_GROUP_NAME。
deleteVolume
定义数据卷删除时处理NAS文件系统策略,由于NAS为共享文件系统,安全起见需要同时配置。
provisioner
驱动类型。本例中取值为
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。reclaimPolicy
PV的回收策略。当值为Delete且deleteVolume为true时,才会在删除PVC的时候将NAS文件系统删除。
执行以下命令创建StorageClass。
kubectl create -f alicloud-nas-fs.yaml
创建PVC和Pod挂载NAS存储卷。
创建并复制以下内容到pvc.yaml文件中。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi
创建并复制以下内容到nginx.yaml文件中。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-fs labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc-fs
执行以下命令创建PVC和Pod。
kubectl create -f pvc.yaml -f nginx.yaml
这种场景下,CSI会在PVC创建时动态新建NAS文件系统和挂载点,PVC删除时动态删除挂载点和文件系统。
验证NAS的持久化存储
NAS提供了持久化存储服务,当某个Pod删除时,重新部署的Pod将自动同步之前Pod的所有数据。
根据以下示例验证NAS的持久化存储特性:
查看部署应用的Pod和NAS文件。
执行以下命令,查看部署的应用所在Pod的名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-n**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
执行以下命令,查看任意一个Pod/data路径下的文件,本文以名为
deployment-nas-1-5b5cdb85f6-n****
的Pod为例。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
无返回结果,表明/
data
路径下无文件。
执行以下命令,在名为
deployment-nas-1-5b5cdb85f6-n****
的Pod/data
路径下创建文件nas。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
执行以下命令,查看名为
deployment-nas-1-5b5cdb85f6-n****
的Pod/data
路径下的文件。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
预期输出:
nas
执行以下命令,删除Pod。
kubectl delete pod deployment-nas-1-5b5cdb85f6-n****
同时在另一个窗口中,执行以下命令,查看Pod删除及Kubernetes重建Pod的过程。
kubectl get pod -w -l app=nginx
验证删除Pod后,NAS里创建的文件是否还存在。
执行以下命令,查看Kubernetes重建的Pod名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdm2g5-m**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
执行以下命令,查看名为
deployment-nas-1-5b5cdm2g5-m****
的Pod/data
路径下的文件。kubectl exec deployment-nas-1-5b5cdm2g5-m**** -- ls /data
预期输出:
nas
nas
文件仍然存在,说明NAS的数据可持久化保存。
验证NAS存储卷的共享存储
NAS存储卷支持同时被多个Pod挂载,当某个Pod修改数据时,其余Pod将自行实现数据的同步。
根据以下示例验证NAS存储卷的共享存储特性:
查看部署的应用所在的Pod和NAS文件。
执行以下命令,查看应用所在的Pod名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-n**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
执行以下命令,查看2个Pod
/data
路径下的文件。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data
执行以下命令,在任意一个Pod的
/data
路径下创建文件nas。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
执行以下命令,查看2个Pod
/data
路径下的文件。执行以下命令,查看名为
deployment-nas-1-5b5cdb85f6-n****
的Pod/data
路径下的文件。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
预期输出:
nas
执行以下命令,查看名为
deployment-nas-2-c5bb4746c-4****
的Pod/data
路径下的文件。kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data
预期输出:
nas
在任意一个Pod的
/data
下创建的文件,两个Pod下的/data
路径下均存在此文件,说明两个Pod共享一个NAS。
相关文档
如需使用CNFS托管NAS文件系统,请参见创建CNFS管理NAS文件系统(推荐)、通过CNFS方式使用NAS文件系统。
如需动态扩容NAS存储卷,请参见使用CNFS自动扩容NAS存储卷。
如需通过NAS的目录配额功能,实现对存储卷空间的有效控制。请参见扩容NAS存储卷容量。
- 本页导读