NAS是阿里云提供的一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统。部署阿里云CSI插件后,您可以在自建的Kubernetes集群使用阿里云NAS作为Volume。挂载NAS时,支持静态数据卷和动态数据卷,本文为您介绍如何使用PVC方式,挂载NAS到ECI Pod上。
前提条件
自建Kubernetes集群中已部署VNode。
集群版本为1.16及以上版本,且已部署CSI-Provisioner组件。
重要关于如何部署CSI-Provisioner组件,请参见alibaba-cloud-csi-driver。如果部署过程中出现问题,请在GitHub提交issue。
如果您的Kubernetes集群部署在线下IDC,请确保已打通IDC与阿里云的网络。
注意事项
NAS为共享存储,一个NAS可以挂载到多个Pod上。此时,如果多个Pod同时修改相同数据,需要应用自行执行数据同步。
在卸载NAS前,请勿删除NAS挂载点,否则可能会造成操作系统无响应。
静态挂载NAS
创建NAS文件系统和挂载点。
创建PV。
参考参数说明表修改以下YAML内容,并保存为static-nas-pv.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: static-nas-pv labels: alicloud-pvname: static-nas-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: static-nas-pv volumeAttributes: server: "2564f4****-ysu87.cn-beijing.nas.aliyuncs.com" path: "/test" mountOptions: - nolock,tcp,noresvport - vers=3
相关参数说明如下表所示:
参数
描述
driver
驱动类型。此处配置为
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。volumeHandle
PV的唯一标识符,与metedata中定义的name保持一致。
server
NAS的挂载点地址。
path
挂载子目录。极速型NAS需要以
/share
为父目录,例如/share/path1
。vers
挂载NAS的NFS协议版本号。推荐使用v3,极速型NAS仅支持v3。
执行以下命令创建PV。
kubectl create -f static-nas-pv.yaml
创建PVC。
将以下内容保存为static-nas-pvc.yaml。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: static-nas-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 25Gi selector: matchLabels: alicloud-pvname: static-nas-pv
执行以下命令创建PVC。
kubectl create -f static-nas-pvc.yaml
将NAS挂载到ECI Pod。
将以下内容保存为static-nas-test.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: static-nas-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: k8s.aliyun.com/vnode: "true" tolerations: - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: static-nas-pvc
执行以下命令创建Deployment。
kubectl create -f static-nas-test.yaml
查看结果。
kubectl get pods -o wide
预期返回:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES static-nas-test-5c4b6d4bd-4kggt 1/1 Running 0 95s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none> static-nas-test-5c4b6d4bd-ql6m4 1/1 Running 0 95s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none>
查看Pod中的文件目录,可以看到已生成NAS对应的挂载目录
/data
,且第一个Pod中写入的文件可以在第二个Pod中查看,即两个Pod共享使用NAS存储。
动态挂载NAS
创建NAS文件系统和挂载点。
创建StorageClass。
参考参数说明表修改以下YAML内容,并保存为nas-sc.yaml。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
参数
描述
mountOptions
配置NAS的options参数,包括NFS协议版本等。
volumeAs
PV类型。取值为subpath时,表示为子目录。CSI-Provisioner将自动创建NAS文件系统子目录。
server
创建子目录类型的PV时,NAS的挂载点地址。
provisioner
驱动类型。此处配置为
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。reclaimPolicy
PV的回收策略,默认为Delete,支持Retain。
Delete:删除PVC时,PV和NAS文件系统会一起删除。
Retain:删除PVC时,PV和NAS文件系统不会被删除,需要您手动删除。
如果数据安全性要求高,推荐使用Retain方式以免误删数据。
执行以下命令创建StorageClass。
kubectl create -f nas-sc.yaml
创建NAS类型的PVC。
将以下内容保存为nas-pvc.yaml。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-subpath resources: requests: storage: 25Gi
执行以下命令创建PVC。
kubectl create -f nas-pvc.yaml
将NAS挂载到ECI实例。
将以下内容保存为nas-test.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nas-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: k8s.aliyun.com/vnode: "true" tolerations: - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 volumeMounts: - name: pvc-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: nas-pvc
执行以下命令创建Deployment。
kubectl create -f nas-test.yaml
查看结果。
kubectl get pods -o wide
预期返回:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nas-test-76c54d4b4-f7b88 1/1 Running 0 4m41s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none> nas-test-76c54d4b4-lqz4b 1/1 Running 0 4m41s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none>
查看Pod中的文件目录,可以看到已生成NAS对应的挂载目录
/data
,且第一个Pod中写入的文件可以在第二个Pod中查看,即两个Pod共享使用NAS存储。