如何在Kubernetes集群动态使用 NAS 持久卷

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: flexvolumenfsversion: "4.0"options: ""---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:name: alicloud-nas-controllernamespace: kube-system
spec:replicas: 1strategy:type: Recreatetemplate:metadata:labels:app: alicloud-nas-controllerspec:tolerations:- effect: NoScheduleoperator: Existskey: node-role.kubernetes.io/master- effect: NoScheduleoperator: Existskey: node.cloudprovider.kubernetes.io/uninitializedserviceAccount: admincontainers:- name: alicloud-nas-controllerimage: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.11.5.4-433631d-aliyunimagePullPolicy: AlwaysvolumeMounts:- mountPath: /persistentvolumesname: nfs-client-rootenv:- name: NFS_SERVERvalue: 154154b095-**.cn-beijing.nas.aliyuncs.com- name: NFS_PATHvalue: /volumes:- name: nfs-client-rootflexVolume:driver: alicloud/nasoptions:path: /server: 154154b095-**.cn-beijing.nas.aliyuncs.comvers: "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: flexvolumenfsversion: "3"options: "noresvport"

3. 创建应用-Deployment:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: replace-user-idannotations:pv-name-created: replace-user-id
spec:storageClassName: alicloud-nasaccessModes:- ReadWriteManyresources:requests:storage: 5Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: "deploy-nas"
spec:replicas: 1strategy:type: Recreatetemplate:metadata:labels:app: deploy-nasspec:containers:- name: "nginx"image: "nginx"volumeMounts:- name: pvc-nasmountPath: "/data"volumes:- name: pvc-naspersistentVolumeClaim: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: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:name: web
spec:replicas: 2serviceName: "nginx"template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:alpinevolumeMounts:- mountPath: "/data"name: pvc-stsvolumeClaimTemplates:- metadata:name: pvc-stsspec:accessModes:- ReadWriteOncestorageClassName: alicloud-nas-flexresources: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-idannotations:pv-name-created: replace-user-id
spec:storageClassName: alicloud-nas-flexaccessModes:- ReadWriteManyresources:requests:storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:name: "nas-pod"
spec:containers:- name: "nginx"image: "nginx"volumeMounts:- name: pvc-nasmountPath: "/data"volumes:- name: pvc-naspersistentVolumeClaim: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

 


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java循环结构

顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。 Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环 一般能够确定循环次数的用for循环 不确定循环次数的用whlie 循环和 do while 循环 do while…

基于 Kubernetes 实践弹性的 CI/CD 系统

大家好,我是来自阿里云容器服务团队的华相。首先简单解释一下何为 Kubernetes 来帮助大家理解。Kuberentes 是一个生产可用的容器编排系统。Kuberentes 一方面在集群中把所有 Node 资源做一个资源池,然后它调度的单元是 Pod,当然 Pod 里面可以有多个容器…

35岁真的是一个坎吗?听完35岁码农的话,我放心了!

戳蓝字“CSDN云计算”关注我们哦!之前看过一个有关程序员从刚入职到中年状态的一个视频,刚入职的程序员激情澎湃,一心想做自己想做的事情,并且想创业,就想拉拢身边的程序员同事一起创业,可是身边的同事就一…

开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题

导语 发布app后,开发者最头疼的问题就是如何解决交付后的用户侧问题的还原和定位,是业界缺乏一整套系统的解决方案的空白领域,闲鱼技术团队结合自己业务痛点在flutter上提出一套全新的技术思路解决这个问题。 我们透过系统底层来捕获ui事件流…

Java中数组的打印

数组不能直接打印,打印出来是一个地址,所以编写以下方法用于打印一个数组 public static void printArr(int[] arr) { for (int i : arr) { System.out.print(i" "); } } println 打印一个对象,默认调用这个对象的toString方法

苹果或推出Windows版Safari浏览器;微软正“取下”Chromium版Edge浏览器的Beta标签;亚马逊申请新专利……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go goSK海力士将于CES推出新款SSD:128层4D …

Tensorflow源码解析2 -- 前后端连接的桥梁 - Session

1 Session概述 Session是TensorFlow前后端连接的桥梁。用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计算。它建立了一套上下文环境,封装了operation计算以及tensor求值的环境。 session创建时,…

为减少用户电话排队,阿里研发了智能客服调度系统

提到调度,大家脑海中可能想起的是调度阿里云的海量机器资源,而对于阿里集团客户体验事业群(CCO)而言,我们要调度的不是机器,而是客服资源。今天,我们邀请阿里高级技术专家力君,为大家…

@value获取不到值

private static String fastDFS;Value("${fastDFS.webUrl}") public void setfastDFS(String fastDFS) {FastdfsClientUtil.fastDFS fastDFS; }

亚信科技高念书:“一巩固三发展”五年打造百亿企业

12月23日下午,“AI你—2019亚信科技媒体沟通会”在北京举办,亚信科技(股票代码:01675.HK)执行董事兼CEO高念书,高级副总裁兼公共与政府事务中心总经理陈武,副总裁兼CTO欧阳晔博士,副…

基于快速GeoHash,如何实现海量商品与商圈的高效匹配?

小叽导读:闲鱼是一款闲置物品的交易平台APP。通过这个平台,全国各地“无处安放”的物品能够轻松实现流动。这种分享经济业务形态被越来越多的人所接受,也进一步实现了低碳生活的目标。 今天,闲鱼团队就商品与商圈的匹配算法为我们…

质量审查一体化智能平台 搭建总览图

一、服务器部署总览 服务器ip应用服务端口192.168.43.106Gitlab8080192.168.43.117Jenkins8080192.168.43.117soanr9000192.168.43.25testEnv_ ExShell8080192.168.43.25testEnv_HotDepoly8081192.168.43.37soanr_mysqlEnv_mysql3306 服务器ip应用服务端口用户秘钥192.168.43…

独家揭秘!阿里大规模数据中心的性能分析

阿里妹导读:数据中心已成为支撑大规模互联网服务的标准基础设施。随着数据中心的规模越来越大,数据中心里每一次软件(如 JVM)或硬件(如 CPU)的升级改造都会带来高昂的成本。合理的性能分析有助于数据中心的…

@NotBlank注解使用不生效的解决办法

NotBlank注解使用时必须在入参处(controller)加Valid 如果不加Valid,NotBlank不会生效。NotEmpty等也是一样。 参考链接:https://www.cnblogs.com/azhqiang/p/8086007.html

云+X案例展 | 金融类:七牛云Pandora 助阵某银行实现日志智能管理

本案例由七牛云投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。银行作为国民经济的重要…

函数运行环境系统动态链接库版本太低?函数计算 fun 神助力分忧解难

背景 最近在处理线上工单的时候,遇到一个用户使用 nodejs runtime 时因为函数计算运行环境的 gcc 版本过低导致无法运行的问题,觉得非常有意思,所以深入的帮用户寻找了解决方案。觉得这个场景应该具有一定的通用性,所以在这篇文章…

liunx JMeter 进行压力测试

启动脚本 jmeter.sh -n -t test.jmx -l result.jtl参数说明 - h 帮助 -> 打印出有用的信息并退出 - n 非GUI模式 -> 在GUI模式下进行JMeter测试 - t 测试文件 要运行的JMeter测试脚本文件 - l 日志文件 记录结果的文件 - r 远程执行 启动远程服务 - H 代理主机 设置JMe…