

K8S的StorageClass实战(NFS)
source link: https://blog.51cto.com/zq2599/5938497
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

K8S的StorageClass实战(NFS)
精选 原创欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
关于StorageClass
- 在K8S环境,当pod需要存储空间时,StorageClass比PV更灵活和方便,官方文档地址: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
- 本次实战的目标是快速创建NFS类型的StorageClass,并验证该StorageClass正常可用,全文由以下部分组成:
- 创建StorageClass;
- 通过helm下载tomcat的chart;
- 修改chart,让tomcat使用刚才创建的StorageClass;
- 在NFS服务端检查文件夹已正常写入;
环境信息和准备工作
- 以下是创建StorageClass必备的环境信息:
- Kubernetes:1.15
- Kubernetes宿主机:CentOS Linux release 7.7.1908
- NFS服务:IP地址 192.168.50.135 ,文件夹 /volume1/nfs-storageclass-test
- 如果您已经准备好了kubernetes和NFS,咱们就开始实战吧;
如何创建StorageClass
- 把创建StorageClass要做的的事情理清楚:
- 创建namespace,这里用hello-storageclass(您也可以选用自己喜欢的);
- 创建rbac:因为StorageClass有对应的pod要运行,每个pod都有自己的身份即serviceaccount,而这个serviceaccount是和某个角色绑定的,所以要创建:serviceaccount、rule、rolebinding;
- 创建provisioner,即关联NFS的工作类,负责给PVC提供存储资源,这里用的是nfs-client-provisioner;
- 创建StorageClass,所有需要PVC通过该StorageClass即可获得存储空间;
- 接下来请SSH登录kubernetes环境,按照上述步骤操作;
创建StorageClass
- 创建namespace: kubectl create namespace hello-storageclass
- 创建 rbac 的脚本直接从我的github下载吧,地址: https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/rbac.yaml
- 下载的rbac.yaml文件中,namespace是 kafka-test ,现在要替换成 hello-storages ,执行命令替换: sed -i ‘s/kafka-test/hello-storageclass/’ rbac.yaml
- 创建rbac: ** kubectl apply -f rbac.yaml
- 创建provisioner的脚本也从我的github下载,地址: https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/deployment.yaml
- 下载的deployment.yaml文件中,namespace是 kafka-test ,现在要替换成 hello-storages ,执行命令替换: sed -i ‘s/kafka-test/hello-storageclass/’ deployment.yaml
- 打开deployment.yaml,设置NFS参数,修改下图红框的四个参数,红框1和3都是NFS server地址,红框2和4都是NFS分配的文件夹目录,请您按照实际的NFS资源来设置:
- 创建provisioner: kubectl apply -f deployment.yaml
- 强烈建议 用 kubectl describe pod xxxxxx -n hello-storageclass 和 kubectl logs -f xxxxxx -n hello-storageclass 命令查看provisioner是否成功创建,下图是我曾经遇到的问题,NFS服务端权限设置有误导致NFS无法使用:
- 创建StorageClass的脚本也从我的github下载,地址: https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/class.yaml
- 下载的class.yaml无需修改,直接使用: kubectl apply -f class.yaml
- class.yaml中的StorageClass名为 managed-nfs-storage ,后面的PVC就用这个名字去申请存储空间;
- 用df命令来检查挂载情况,发现NFS的已经挂载到K8S宿主机:
- 至此,StorageClass已经就绪,K8S环境中的PVC可以申请使用了,接下来通过实战验证应用的pod能否使用StorageClass的存储空间;
- 接下来的实战是通过helm在kubernetes部署tomcat,该tomcat所需的存储空间是通过StorageClass分配的,请您在kubernetes上准备好helm,我这里用的是2.16版本
- helm的安装和使用请参考 《部署和体验Helm(2.16.1版本)》
tomcat使用StorageClass实战
- 增加helm仓库(带有tomcat的仓库): helm repo add bitnami https://charts.bitnami.com/bitnami
- 下载tomcat的chart: helm fetch bitnami/tomcat
- chart下载成功后,当前目录出现tomcat配置压缩包 tomcat-6.2.4.tgz ,解压: tar -zxvf tomcat-6.2.4.tgz
- 解压得到 tomcat 文件夹,进入后打开 values.yaml 文件,找到 persistence 节点,增加下图红框中的内容:
- 在tomcat目录下执行命令:
helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
- 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的30300:
- 浏览器访问 宿主机IP:30300 ,出现tomcat欢迎页面:
- 去NFS server检查磁盘使用情况,如下图,可见已分配给tomcat的PVC,并且写入了tomcat的基本数据:
- 本次实战创建了各种类型的资源,使用下面的命令可以将其全部清理掉:
helm del --purge tomcat001
kubectl delete storageclass managed-nfs-storage
kubectl delete deployment nfs-client-provisioner -n hello-storageclass
kubectl delete clusterrolebinding run-nfs-client-provisioner
kubectl delete serviceaccount nfs-client-provisioner -n hello-storageclass
kubectl delete role leader-locking-nfs-client-provisioner -n hello-storageclass
kubectl delete rolebinding leader-locking-nfs-client-provisioner -n hello-storageclass
kubectl delete clusterrole nfs-client-provisioner-runner
kubectl delete namespace hello-storageclass
- 至此,StorageClass的创建和使用的实战就完成了,如果您在学习kubernetes存储相关的知识,希望本文能给您一些参考;
欢迎关注51CTO博客:程序员欣宸
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
-
47
说明 最近由于需要部署有状态服务,没有云环境的支持,不能很好的通过cloud provider调用云磁盘EBS,所以在node节点部署了一套glusterFS分布式文件存储系统,用来提供非结构化数据存储,存储图片,大文件等等. Kuberne...
-
24
StorageClass资源1,为什么要使用StorageClass?之前常规的手动挂载,看似没有什么问题,但细想一下,pvc在向pv申请存储空间时,是根据指定的pv名称,访问模式,容量大小来决定具体向那个pv来申请空间的,假设pv的容量为20G,定义的访问模式是WRO(只允许以读写的...
-
26
kubernetes持久化存储,静态存储【pv】,动态存储【StorageClass】(5) 在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath、configmap以及secret的机制和用途 1、EmptydirEmptyDir是一个空目...
-
14
K8S离线部署笔记-12-NFS动态存储 Posted on 2020-09-29...
-
8
K8S离线部署笔记-8-NFS服务 Posted on 2020-09-28...
-
13
使用nfs作为k8s的PersistentVolume 在较小规模的生产和开发的过程中,对于k8s的某些应用可能我们需要提供存储的支持,在初期我们可能并不需要性能那么高,扩展性那么强的存储,那么这个时候nfs就成了我们的首选 本文将引导各位在服务器中部署nfs服...
-
19
GlusterFS在Kubernetes中的应用 GlusterFS服务简介 GlusterFS是一个可扩展,分布式文件系统,集成来自多台服务器上的磁盘存储资源到单一全局命名空间,以提供共享文件存储。
-
5
k8s中创建nfs外部供应商(provisioner) 精选 原创 派大星的头脑 2022-11-16 16:4...
-
4
k8s 使用 nfs 下 pod 无法创建的解决思路 ...
-
6
如果要在Kubernetes中部署StatefulSet类型的Pod,需要先创建持久化的StorageClass、PV,从而让PVC能够使用对应的存储; StorageClass常用的类型有:Local(例如:HostPath、EmptyDir等)、NFS、Ceph; 在声明NFS类型的StorageClass时需要用到第三方的Pro...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK