1. 介绍:

本文介绍的动态生成NAS存储卷的方案:在一个已有文件系统上,自动生成一个目录,这个目录定义为目标存储卷;

镜像地址:registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.11.5.4-433631d-aliyun

默认生成资源:
生成的PV名字为:pvc-${pvc-uid}
生成目录的名字:namespace-pvcname-pvname

可以再pvc的annotations中如下声明,自定义名字:
生成的pv、目录名字为下面定义的名字。


annotations:
pv-name-created: replace-user-id

2. 部署NAS Controller

创建alicloud-nas-controller,实现动态provider nas pv;
创建alicloud-nas storageclass,为nas pv provision 提供模板;


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas
provisioner: alicloud/nas
reclaimPolicy: Delete
parameters:
drivertype: flexvolume
nfsversion: "4.0"
options: "" ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: alicloud-nas-controller
namespace: kube-system
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: alicloud-nas-controller
spec:
tolerations:
- effect: NoSchedule
operator: Exists
key: node-role.kubernetes.io/master
- effect: NoSchedule
operator: Exists
key: node.cloudprovider.kubernetes.io/uninitialized
serviceAccount: admin
containers:
- name: alicloud-nas-controller
image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.11.5.4-433631d-aliyun
imagePullPolicy: Always
volumeMounts:
- mountPath: /persistentvolumes
name: nfs-client-root
env:
- name: NFS_SERVER
value: 154154b095-**.cn-beijing.nas.aliyuncs.com
- name: NFS_PATH
value: /
volumes:
- name: nfs-client-root
flexVolume:
driver: alicloud/nas
options:
path: /
server: 154154b095-**.cn-beijing.nas.aliyuncs.com
vers: "4.0"

StorageClass使用说明:


drivertype: 用来表示生成pv存储类型,可选nfs, flexvolume.
nfs: 默认选项,表示使用k8s原生NFS驱动挂载;
flexvolume: 表示使用阿里云提供的Flexvolume NAS驱动挂载; nfsversion: 挂载nfs使用的版本,支持3,4.0.默认为4.0;
drivertype为flexvolume的时候在这里配置;
为nfs的时候通过mountOptions 配置; options:为挂载nfs的可选项配置;
drivertype为flexvolume的时候在这里配置;
为nfs的时候通过mountOptions 配置;

StorageClass举例:


## 使用kubernetes提供的NFS驱动,并配置mountOptions,reclaimPolicy为Delete;
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-nfs
mountOptions:
- vers=4.0
- noresvport
provisioner: alicloud/nas
reclaimPolicy: Delete ## 使用阿里云提供的Flexvolume NAS驱动,配置nfs版本、options;
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-flex
provisioner: alicloud/nas
reclaimPolicy: Delete
parameters:
drivertype: flexvolume
nfsversion: "3"
options: "noresvport"

3. 创建应用-Deployment:


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: replace-user-id
annotations:
pv-name-created: replace-user-id
spec:
storageClassName: alicloud-nas
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: "deploy-nas"
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: deploy-nas
spec:
containers:
- name: "nginx"
image: "nginx"
volumeMounts:
- name: pvc-nas
mountPath: "/data"
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: replace-user-id 执行:
# userID="hello-123"
# cat deploy.yaml | sed "s/replace-user-id/\"$userID\"/g" | kubectl create -f - # kubectl get pod | grep deploy-nas
deploy-nas-85696b6bfc-t5dmh 1/1 Running 0 28m # kubectl get pvc | grep hell
hello-123 Bound hello-123 5Gi RWX alicloud-nas-flex 28m # kubectl get pv | grep hell
hello-123 5Gi RWX Delete Bound default/hello-123 alicloud-nas-flex 28m # Nas目录下查看生成目录:
# ls -l | grep hello
drwxrwxrwx 2 root root 4096 2月 19 09:58 hello-123

4. 创建应用-StatefulSet:

使用volumeTemplateClaim不支持使用pv-name-created配置pv名字;


apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web
spec:
replicas: 2
serviceName: "nginx"
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
volumeMounts:
- mountPath: "/data"
name: pvc-sts
volumeClaimTemplates:
- metadata:
name: pvc-sts
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-nas-flex
resources:
requests:
storage: 2Gi 创建后查看:
# kubectl get pod | grep web
web-0 1/1 Running 0 7s
web-1 1/1 Running 0 4s # kubectl get pvc | grep web
pvc-sts-web-0 Bound pvc-65ab251a-33ec-11e9-a151-00163e066784 2Gi RWO alicloud-nas-flex 13m
pvc-sts-web-1 Bound pvc-8437c50e-33ed-11e9-a151-00163e066784 2Gi RWO alicloud-nas-flex 5m # kubectl get pv | grep web
pvc-65ab251a-33ec-11e9-a151-00163e066784 2Gi RWO Delete Bound default/pvc-sts-web-0 alicloud-nas-flex 13m
pvc-8437c50e-33ed-11e9-a151-00163e066784 2Gi RWO Delete Bound default/pvc-sts-web-1 alicloud-nas-flex 5m # Nas目录下查看生成目录:
# ls -l | grep sts
drwxrwxrwx 2 root root 4096 2月 19 10:16 default-pvc-sts-web-0-pvc-65ab251a-33ec-11e9-a151-00163e066784
drwxrwxrwx 2 root root 4096 2月 19 10:24 default-pvc-sts-web-1-pvc-8437c50e-33ed-11e9-a151-00163e066784

5. 创建应用-Pod:


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: replace-user-id
annotations:
pv-name-created: replace-user-id
spec:
storageClassName: alicloud-nas-flex
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: "nas-pod"
spec:
containers:
- name: "nginx"
image: "nginx"
volumeMounts:
- name: pvc-nas
mountPath: "/data"
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: replace-user-id # userID="pod-123"
# cat pod.yaml | sed "s/replace-user-id/\"$userID\"/g" | kubectl create -f - # kubectl get pod | grep pod
nas-pod 1/1 Running 0 32s # kubectl get pvc | grep pod
pod-123 Bound pod-123 5Gi RWX alicloud-nas-flex 44s # kubectl get pv | grep pod
pod-123 5Gi RWX Delete Bound default/pod-123 alicloud-nas-flex 48s # ls -l | grep pod
drwxrwxrwx 2 root root 4096 2月 19 10:54 pod-123


本文作者:kanjunbao

阅读原文

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

如何在Kubernetes集群动态使用 NAS 持久卷的更多相关文章

  1. 如何在 Kubernetes 集群中玩转 Fluid + JuiceFS

    作者简介: 吕冬冬,云知声超算平台架构师, 负责大规模分布式机器学习平台架构设计与功能研发,负责深度学习算法应用的优化与 AI 模型加速.研究领域包括高性能计算.分布式文件存储.分布式缓存等. 朱唯唯 ...

  2. 在 Linux 部署多节点 Kubernetes 集群与 KubeSphere 容器平台

    KubeSphere 是在 Kubernetes 之上构建的以应用为中心的企业级容器平台,所有供为用户提供简单易用的操作界面以及向导式操作方式.同时,KubeSphere Installer 提供了 ...

  3. Kubernetes 集群日志 和 EFK 架构日志方案

    目录 第一部分:Kubernetes 日志 Kubernetes Logging 是如何工作的 Kubernetes Pod 日志存储位置 Kubelet Logs Kubernetes 容器日志格式 ...

  4. Airbnb的动态kubernetes集群扩缩容

    Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...

  5. 如何在CentOS上创建Kubernetes集群

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由编程男孩 发表于云+社区专栏 介绍 Kubernetes(常简称为K8s)是用于自动部署.扩展和管理容器化(containerized ...

  6. Traefik实现Kubernetes集群服务外部https访问

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7707942.html traefik 是一个前端http反向代理服务器以及负载均衡器,支持多种微服务后 ...

  7. Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群

    使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...

  8. Kubernetes集群部署关键知识总结

    Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...

  9. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

随机推荐

  1. [Android] 开源框架 xUtils HttpUtils 代理设置 (Temporary Redirect错误)

    今天简单学习了一下xUtils的使用 https://github.com/wyouflf/xUtils 其中用到HttpUtils模块时,发现总是出现Temporary Redirect 错误. 查 ...

  2. 移动端ios中click点击失效

    原因: Safari应该有某种机制用来节约资源,就是如果元素摸起来不像可以点的,就不给他响应事件. 所以,需要在点击的元素上加上{cursor:pointer},就解决了.当然还有别的方法,检点来说就 ...

  3. iOS 笔试题

    转:http://blog.sina.com.cn/s/blog_b0c5954101014upb.html 1.截取字符串”20|http://www.621life.com“ 中 ‘|’字符前面及 ...

  4. PHP mysql基本语句指令

    /*选择数据库 use test; */ /* 显示所有的数据库 show databases; */ /*删除表/数据库 drop database test1; delete from user1 ...

  5. QQ空间的文艺打开方法

    QQ空间被限制?打不开? 看看这里 第一种:http://user.qzone.qq.com/627911903 第二种:http://627911903.qzone.qq.com 第三种:http: ...

  6. Code Force 21B Intersection

    B. Intersection time limit per test1 second memory limit per test256 megabytes inputstandard input o ...

  7. _init_() got an unexpected keyword argument ‘shape’

    按照<TensorFlow:实战Google深度学习框架>一书学习的tensorflow,书中使用的是0.9.0版本,而我安装的是1.11.0 如果按照书上的例子来,因为这本书使用tens ...

  8. 品友互动大数据平台的技术演化 https://www.sohu.com/a/191202836_99982360

    品友互动大数据平台的技术演化

  9. Fully qualified name FQCN

    Fully qualified name - Wikipedia https://en.wikipedia.org/wiki/Fully_qualified_name In computer prog ...

  10. python - while语句/pass/死循环/break/continue/while...else...

    程序开发的原则: 写重复代码 是可耻的行为: 1.while 条件: 执行代码... #循环打印0-100count = 0 while count <= 100: print("lo ...