1. 前言

NAS存储盘能将nfs(网络文件系统)挂载到你的Pod中,阿里云Kubernetes CSI支持静态存储卷挂载动态存储卷挂载2种方式, 在静态存储卷挂载的方式中,通常需要手动编辑和创建一个pv/pvc进行挂载,当需要的pv/pvc数量很大的时候,手动创建就显得非常繁琐了,这时动态存储卷挂载的功能可以满足您的需求。本文演示如何使用NAS动态存储卷。

2. 部署csi-nas-plugin

如何你的Kubernetes集群中还没有部署, 请参考以下步骤进行部署:

2.1 部署csi-provisioner

$ kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/nas/nas-provisioner.yaml

2.2 部署csi-nasplugin

$ kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/nas/nas-plugin.yaml

2.3 检查运行状态

$ kubectl -nkube-system get po -o wide |grep csi
csi-nasplugin-7mbmx                                2/2     Running   0
csi-nasplugin-89t9v                                2/2     Running   0
csi-nasplugin-8fw5p                                2/2     Running   0
csi-nasplugin-grbqn                                2/2     Running   0
csi-nasplugin-ks8mw                                2/2     Running   0
csi-nasplugin-pp5g7                                2/2     Running   0
csi-provisioner-0                                  2/2     Running   0

3. 使用NAS动态存储卷

目前阿里云Kubernetes CSI支持2种类型的NAS动态存储卷挂载:subpath方式和filesystem方式。

3.1 subpath类型的NAS动态存储卷使用

3.1.1 使用场景

当你的多个Kubernetes应用或者Pod需要挂载相同的NAS存储卷共享数据时,或不同的Pod挂载相同NAS文件系统的不同子目录时, 可以使用subpath类型的NAS动态存储卷方式。

3.1.2 创建NAS文件系统和挂载点

subpath的方式要求用户首先使用NAS控制台 或 SDK/API 创建好NAS文件系统和挂载点。
文件系统:

挂载点:

3.1.3 创建StoragClass

编辑storageclass.yaml文件, 详细参数说明见:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/nas-dynamic.md

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: alicloud-nas-subpath
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:volumeAs: subpathserver: "xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/k8s/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain

运行以下命令创建StorageClass alicloud-nas-subpath

$ kubectl create -f storageclass.yaml

3.1.4 创建PV/PVC和Pod挂载NAS存储卷

创建Pod nginx-1 nginx-2共享NAS存储卷的同一个子目录, pvc.yaml nginx-1.yamlnginx-2.yaml文件内容如下:
pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: nas-csi-pvc
spec:accessModes:- ReadWriteManystorageClassName: alicloud-nas-subpathresources:requests:storage: 20Gi

nginx-1.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nas-1labels:app: nginx-1
spec:selector:matchLabels:app: nginx-1template:metadata:labels:app: nginx-1spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvc

nginx-2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nas-2labels:app: nginx-2
spec:selector:matchLabels:app: nginx-2template:metadata:labels:app: nginx-2spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvc

创建pvc和deployment:

$ kubectl create -f pvc.yaml -f nginx-1.yaml -f nginx-2.yaml$ kubectl get po
NAME                                READY   STATUS    RESTARTS   AGE
deployment-nas-1-5b5cdb85f6-nhklx   1/1     Running   0          32s
deployment-nas-2-c5bb4746c-4jw5l    1/1     Running   0          32s

在这种情况下, NAS存储卷的xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/share/nas-79438493-f3e0-11e9-bbe5-00163e09c2be 会同时挂载到deployment-nas-1-5b5cdb85f6-nhklx 和 deployment-nas-2-c5bb4746c-4jw5l 的 /data目录下。 注意: "/share" 为StorageClass中指定的subpath,"nas-79438493-f3e0-11e9-bbe5-00163e09c2be"为pv的name

如果你需要为不同的Pod挂载同一个NAS文件系统的不同子目录, 则需要分别创建pvc-1和nginx-1以及pvc-2和nginx-2。

3.2 filesystem类型的NAS动态存储卷使用

注意: filesystem类型的NAS动态卷在删除时默认保留文件系统和挂载点, 若需要在释放pv资源的同时释放NAS文件系统和挂载点, 则需要同时设置StorageClass中的reclaimPolicy为Delete且deleteVolume的值为"true"

3.2.1 使用场景

3.1中的subpath方式中,你需要首先手动创建NAS文件系统和挂载点。 当你的Kubernetes应用需要动态创建和删除NAS文件系统和挂载点时, 可以使用filesystem类型。 注意:使用filesystem类型NAS存储卷的Pod只能创建一个文件系统和一个挂载点, 多个Pod之间无法共享一个存储卷

3.2.2 创建StorageClass

编辑storageclass.yaml文件, 详细参数说明见:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/nas-dynamic.md

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: alicloud-nas-fs
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:volumeAs: filesystemvpcId: "vpc-xxxxxxxxxxxx"vSwitchId: "vsw-xxxxxxxxx"deleteVolume: "false"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain

运行以下命令创建StorageClass alicloud-nas-subpath

$ kubectl create -f storageclass.yaml

3.2.3 创建PV/PVC和Pod挂载NAS存储卷

pvc.yaml nginx.yaml文件内容如下:
pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: nas-csi-pvc-fs
spec:accessModes:- ReadWriteManystorageClassName: alicloud-nas-fsresources:requests:storage: 20Gi

nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nas-fslabels:app: nginx
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvc-fs

创建pvc和deployment:

$ kubectl create -f pvc.yaml -f nginx.yaml

在这种场景下, csi会在pvc创建时动态新建NAS文件系统和挂载点, pvc删除时动态删除挂载点和文件系统。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

阿里云Kubernetes CSI实践—NAS动态存储卷使用相关推荐

  1. 使用NAS动态存储卷创建有状态应用

    介绍: 目前动态生成NAS存储卷的实现:在一个已有文件系统上,自动生成子文件系统(子目录),并生成目标存储卷(PV): 生成的PV名字为:pvc-${pv-uid} 镜像介绍: registry.cn ...

  2. 在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics

    阿里云Kubernetes服务运行SpringCloud osswangxining大侠在 阿里云Kubernetes SpringCloud 实践进行时 系列文章中系统地介绍了如何在阿里云Kuber ...

  3. 【云原生】阿里云Kubernetes(ACK)简介

    目录 一.产品形态 1.集群使用限制 1)限制概述 2)ACK集群配额限制 3)依赖底层云产品配额限制 2.ACK的优势 一.产品形态 更多介绍请点击:什么是容器服务Kubernetes版_容器服务K ...

  4. 解锁高性能计算与区块链应用,阿里云Kubernetes服务召唤神龙

    摘要: 阿里云ECS弹性裸金属服务器(神龙)已经与其容器服务全面兼容,用户可以选择在弹性裸金属服务器上直接运行容器.管控Kubernetes/Docker容器集群,如此将会获得非常出色的性能.数倍提升 ...

  5. 阿里云Kubernetes实战2–搭建基础服务

    前言: 在系列的第一篇文章中,我已经介绍过如何在阿里云基于kubeasz搭建K8S集群,通过在K8S上部署gitlab并暴露至集群外来演示服务部署与发现的流程.文章写于4月,忙碌了小半年后,我才有时间 ...

  6. 自建K8S迁移镜像、应用至阿里云ACK最佳实践

    简介:本最佳实践构建以下场景: 1.以河源ECS构建Harbor仓库,模拟IDC的镜像仓库服务. 2.以河源ECS构建Registry仓库,模拟IDC的镜像仓库服务. 3.以河源地域模的ECS搭建K8 ...

  7. 阿里云服务(三)—对象存储OSS和块存储

    五.对象存储OSS 块存储适合存放本地使用的一些文件,而且成本比较高,容量也有一些限制,不是适合数据量庞大的大数据. 1.对象存储OSS的概念   1.1 什么是对象存储OSS     存储分类   ...

  8. STM32 ES8266上阿里云IOT MQTT实践【第一章】:物联网简介(什么是物联网)

    课程大纲 [第一章]:物联网简介(什么是物联网) [第二章]:物联网十大应用场景 [第三章]:什么是MCU? [第四章]:MCU的应用范围 [第五章]:我们要怎么入门MCU开发? [第六章]:如何使用 ...

  9. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布...

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意: 本文中使用的jx工具.cloud-envi ...

最新文章

  1. cisco 2950 3550 端口速率限制实现方法
  2. .NET 动态向Word文档添加数据
  3. 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南
  4. Leetcode-121. 买卖股票的最佳时机
  5. Stanford NLP
  6. java 仿qq登录界面7.1_安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
  7. NeurlPS 2019丨微软亚洲研究院 5 篇精选论文解读
  8. 单向链表反转-JS实现
  9. DBCP与C3P0连接池组件
  10. OpenLayers 6 实现仿Echarts风格的动态迁徙图/航班图
  11. 微信小程序实现将图片保存到手机相册
  12. Linux Kernel Atomic解析
  13. 都柏林圣三一大学计算机科学,都柏林圣三一学院简介-录取要求-就业情况-录取案例-就读体验-WordSunny留学...
  14. 从零搭建飞冰微前端项目《第一篇:优势分析》
  15. B/S模式实现批量打包apk
  16. 【技术认证介绍】阿里云认证介绍
  17. 车轮轨迹原理_在简单地形上小车运动轨迹的数学表达(一)
  18. 借CT阵营之力NFV让运营商网络变得更美
  19. 「nature protocols」组学数据的通路富集分析和可视化: g:Profiler, GSEA, Cytoscape 和 EnrichmentMap...
  20. 怎么快速学好大数据开发?

热门文章

  1. gdal java api_Java使用GDAL库
  2. linux date fmt,date_format(date,frm) 详解
  3. 小黑框如何连接mysql_珍藏版(cmd小黑框)数据库命令及操作
  4. can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?
  5. tensorflowgpu利用率为0_直流电压利用率的提高方法-梯形波调制法
  6. 分别对时分秒加减的java_Java中关于获取时间(日期)的总结大全
  7. github 私有化部署_2019,GitHub 宣布私有代码仓库从此免费!
  8. java 数据结构 迷宫_JAVA数据结构与算法之递归(一)~ 迷宫问题
  9. java如何把png转换成jpg_Java实现将png格式图片转换成jpg格式图片的方法【测试可用】...
  10. python如何提取图片特征向量_在python中计算图像的特征向量