如何在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: 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 持久卷的更多相关文章
- 如何在 Kubernetes 集群中玩转 Fluid + JuiceFS
作者简介: 吕冬冬,云知声超算平台架构师, 负责大规模分布式机器学习平台架构设计与功能研发,负责深度学习算法应用的优化与 AI 模型加速.研究领域包括高性能计算.分布式文件存储.分布式缓存等. 朱唯唯 ...
- 在 Linux 部署多节点 Kubernetes 集群与 KubeSphere 容器平台
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的企业级容器平台,所有供为用户提供简单易用的操作界面以及向导式操作方式.同时,KubeSphere Installer 提供了 ...
- Kubernetes 集群日志 和 EFK 架构日志方案
目录 第一部分:Kubernetes 日志 Kubernetes Logging 是如何工作的 Kubernetes Pod 日志存储位置 Kubelet Logs Kubernetes 容器日志格式 ...
- Airbnb的动态kubernetes集群扩缩容
Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...
- 如何在CentOS上创建Kubernetes集群
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由编程男孩 发表于云+社区专栏 介绍 Kubernetes(常简称为K8s)是用于自动部署.扩展和管理容器化(containerized ...
- Traefik实现Kubernetes集群服务外部https访问
转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7707942.html traefik 是一个前端http反向代理服务器以及负载均衡器,支持多种微服务后 ...
- Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群
使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...
- Kubernetes集群部署关键知识总结
Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...
- 二进制安装部署kubernetes集群---超详细教程
本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...
随机推荐
- 【BZOJ4231】回忆树 离线+fail树+KMP
[BZOJ4231]回忆树 Description 回忆树是树. 具体来说,是n个点n-1条边的无向连通图,点标号为1~n,每条边上有一个字符(出于简化目的,我们认为只有小写字母). 对一棵回忆树来说 ...
- ios 让两个tableView同时处于选中状态
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { [_l ...
- MySQL5.7压缩包安装图文教程
MySQL5.7压缩包安装图文教程 一.下载网址:https://dev.mysql.com/downloads/ 选择5.7版本 二.解压 下载完成后解压,解压后如下(zip是免安装的,解压后配置成 ...
- Node REPL
Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中. 执行 - 执行输入的数据结构 打印 - 输出结果 循环 - 循环操作 ...
- python--sha256
import hmacimport hashlib def get_hmacsha256(key, message): key_bytes = bytes(key, 'utf-8') message_ ...
- SQL Server中执行Sql字符串,返回执行结果
今天遇到一个问题:想把sql字符串在SQL Server 中执行了,并获取执行的结果 ); SET @tablename='select @table3 = count(1) from UserVis ...
- 小程序 wx.navigateTo传值总结
wx.navigateTo(Object object) 保留当前页面,跳转到应用内的某个页面.但是不能跳到 tabbar 页面.使用 wx.navigateBack 可以返回到原页面.小程序中页面栈 ...
- Macbook pro 13" compile Apollo 2.5
STEPS: 0. Install Homebrew 1. Install 'Docker for Mac 18.03+',配置CPUs (n个CPUs,Bazel开n个线程编译), Memory ...
- 在HTML里面HEAD部分的META元素要表达的内容是什么
1.name属性主要有以下几种参数: A.Keywords(关键字) 说明:keywords用来告诉搜索引擎你网页的关键字是什么. 举例:<meta name ="keywords&q ...
- Python3: Command not found(Mac OS)
1. 第一步:查看以下路径是否安装有 Python 3.x # 打开以下目录, 版本号有可能不同 cd /usr/local/Cellar/python/3.5.2_3/bin # 查看当前目录的内容 ...