NAS提供了共享存储和持久化存储的服务,满足您需要多个Pod共享数据的应用场景。本文为您介绍如何使用NAS实现共享存储和持久化存储。
背景信息
NAS支持同时被多个Pod挂载,此时多个Pod可能同时修改相同数据,需要应用自行实现数据的同步。
有状态服务-NAS的使用场景:
- 对磁盘I/O要求较高的应用。
- 读写性能相对于对象存储OSS高。
- 可实现跨主机文件共享,例如可作为文件服务器。
有状态服务-NAS的使用方式:
- 手动创建文件系统,并添加挂载点。
- 手动创建PV及PVC。
本文为您介绍利用阿里云提供的flexvolume插件,通过PV或PVC的方式使用阿里云NAS。
创建PV
- 创建pv-nas.yaml文件。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nas
labels:
alicloud-pvname: pv-nas
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
flexVolume:
driver: "alicloud/nas"
options:
server: "***-**.cn-hangzhou.nas.aliyuncs.com" ////请替换为您实际的挂载点
path: "/k8s1"
vers: "4.0"
参数 |
描述 |
alicloud-pvname |
PV的名称。 |
server |
NAS的挂载点。可在文件存储控制台,单击左侧导航栏的文件系统列表,选择目标文件系统,单击操作列管理,在挂载点区域,挂载地址即为NAS数据盘的挂载点。
|
path |
NAS的挂载目录,支持挂载NAS的子目录,当子目录不存在时,会在NAS上自动创建子目录并挂载。 |
vers |
(可选)NFS挂载协议的版本号,支持3和4.0,默认情况是3。 |
mode |
(可选)挂载目录的访问权限,默认情况是不配置。
说明
- 挂载NAS的根目录不能配置访问权限。
- 当NAS中数据量很大时,配置
mode 会导致挂载非常慢,甚至挂载失败,不建议配置。
|
- 执行以下命令,创建PV。
kubectl create -f pv-nas.yaml
预期结果:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择,可以看到刚刚创建的PV。

创建PVC
创建NAS存储声明PVC,使用selector
筛选PV,精确配置PVC和PV的绑定关系。
- 创建pvc-nas.yaml文件。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
- 执行以下命令,创建PVC。
kubectl create -f pvc-nas.yaml
预期结果:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择,可以看到刚刚创建的PVC。

创建应用
- 创建nas.yaml文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nas-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: pvc-nas
mountPath: "/data"
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: pvc-nas
- 执行以下命令,创建Deployment。
kubectl create -f nas.yaml
预期结果:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的应用管理。
- 在目标集群页面下,选择左侧导航栏的,可以看到刚刚创建的Deployment。

NAS的共享存储
- 执行以下命令,查看部署的deployment所在Pod的名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
nas-static-f96b6b5d7-r**** 1/1 Running 0 9m
nas-static-f96b6b5d7-w**** 1/1 Running 0 9m
- 执行以下命令,查看/data路径下的文件。
kubectl exec nas-static-f96b6b5d7-r**** ls /data
预期输出:
kubectl exec nas-static-f96b6b5d7-w**** ls /data
- 执行以下命令,在任意一个Pod的/data路径下创建文件nas。
kubectl exec nas-static-f96b6b5d7-r**** touch /data/nas
- 查看Pod下的文件。
执行以下命令,查看Pod/data路径下的文件。
kubectl exec nas-static-f96b6b5d7-r**** ls /data
预期输出:
nas
执行以下命令,查看另一个Pod/data路径下的文件。
kubectl exec nas-static-f96b6b5d7-w**** ls /data
预期输出:
nas
说明 在任意一个Pod的/data下创建的文件,两个Pod下的/data路径下均存在此文件,说明两个Pod共享一个NAS。
NAS的持久化存储
- 执行以下命令,删除该应用的所有Pod。
kubectl delete pod nas-static-f96b6b5d7-r**** nas-static-f96b6b5d7-wthmb
预期输出:
pod "nas-static-f96b6b5d7-r****" deleted
pod "nas-static-f96b6b5d7-w****" deleted
- 执行以下命令,查看Pod删除及Kubernetes重建Pod的过程。
kubectl get pod -w -l app=nginx
预期输出:
NAME READY STATUS RESTARTS AGE
nas-static-f96b6b5d7-r**** 1/1 Running 0 27m
nas-static-f96b6b5d7-w**** 1/1 Running 0 27m
nas-static-f96b6b5d7-r**** 1/1 Terminating 0 28m
nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s
nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s
nas-static-f96b6b5d7-w**** 0/1 ContainerCreating 0 0s
nas-static-f96b6b5d7-w**** 1/1 Terminating 0 28m
nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s
nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s
nas-static-f96b6b5d7-n**** 0/1 ContainerCreating 0 0s
nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-w**** 1/1 Running 0 10s
nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m
nas-static-f96b6b5d7-n**** 1/1 Running 0 17s
- 执行以下命令,查看Kubernetes重建的Pod名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
nas-static-f96b6b5d7-n**** 1/1 Running 0 21s
nas-static-f96b6b5d7-w**** 1/1 Running 0 21s
- 查看Pod下的文件。
执行以下命令,查看Pod/data路径下的文件。
kubectl exec nas-static-f96b6b5d7-n**** ls /data
预期输出:
nas
执行以下命令,查看另一个Pod/data路径下的文件。
kubectl exec nas-static-f96b6b5d7-w**** ls /data
预期输出:
nas
说明 刚刚创建的文件nas并没有被删除,说明NAS的数据可持久保存。
在文档使用中是否遇到以下问题
更多建议
匿名提交