关于StorageClass

在K8S环境,当pod需要存储空间时,StorageClass比PV更灵活和方便,官方文档地址:https://kubernetes.io/docs/concepts/storage/persistent-volumes/

本次实战

本次实战的目标是快速创建NFS类型的StorageClass,并验证该StorageClass正常可用,全文由以下部分组成:

  1. 创建StorageClass;
  2. 通过helm下载tomcat的chart;
  3. 修改chart,让tomcat使用刚才创建的StorageClass;
  4. 在NFS服务端检查文件夹已正常写入;

环境信息和准备工作

以下是创建StorageClass必备的环境信息:

  1. Kubernetes:1.15
  2. Kubernetes宿主机:CentOS Linux release 7.7.1908
  3. NFS服务:IP地址192.168.50.135,文件夹/volume1/nfs-storageclass-test

参考文章

如果您想了解Kubernetes和NFS搭建的更多信息,请参考:

  1. 《kubespray2.11安装kubernetes1.15》
  2. 《Ubuntu16环境安装和使用NFS》
  3. 《K8S使用群晖DS218+的NFS》

如果您已经准备好了kubernetes和NFS,咱们就开始实战吧;

如何创建StorageClass

把创建StorageClass要做的的事情理清楚:

  1. 创建namespace,这里用hello-storageclass(您也可以选用自己喜欢的);
  2. 创建rbac:因为StorageClass有对应的pod要运行,每个pod都有自己的身份即serviceaccount,而这个serviceaccount是和某个角色绑定的,所以要创建:serviceaccount、rule、rolebinding;
  3. 创建provisioner,即关联NFS的工作类,负责给PVC提供存储资源,这里用的是nfs-client-provisioner;
  4. 创建StorageClass,所有需要PVC通过该StorageClass即可获得存储空间;

接下来请SSH登录kubernetes环境,按照上述步骤操作;

创建StorageClass

  1. 创建namespace:kubectl create namespace hello-storageclass
  2. 创建rbac的脚本直接从我的github下载吧,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/rbac.yaml
  3. 下载的rbac.yaml文件中,namespace是kafka-test,现在要替换成hello-storages,执行命令替换:sed -i ‘s/kafka-test/hello-storageclass/’ rbac.yaml
  4. 创建rbac:kubectl apply -f rbac.yaml
  5. 创建provisioner的脚本也从我的github下载,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/deployment.yaml
  6. 下载的deployment.yaml文件中,namespace是kafka-test,现在要替换成hello-storages,执行命令替换:sed -i ‘s/kafka-test/hello-storageclass/’ deployment.yaml
  7. 打开deployment.yaml,设置NFS参数,修改下图红框的四个参数,红框1和3都是NFS server地址,红框2和4都是NFS分配的文件夹目录,请您按照实际的NFS资源来设置:
  8. 创建provisioner:kubectl apply -f deployment.yaml
  9. 强烈建议用kubectl describe pod xxxxxx -n hello-storageclass和kubectl logs -f xxxxxx -n hello-storageclass命令查看provisioner是否成功创建,下图是我曾经遇到的问题,NFS服务端权限设置有误导致NFS无法使用:
  10. 创建StorageClass的脚本也从我的github下载,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/class.yaml
  11. 下载的class.yaml无需修改,直接使用:kubectl apply -f class.yaml
  12. class.yaml中的StorageClass名为managed-nfs-storage,后面的PVC就用这个名字去申请存储空间;
  13. 用df命令来检查挂载情况,发现NFS的已经挂载到K8S宿主机:
  14. 至此,StorageClass已经就绪,K8S环境中的PVC可以申请使用了,接下来通过实战验证应用的pod能否使用StorageClass的存储空间;

准备工作

  1. 接下来的实战是通过helm在kubernetes部署tomcat,该tomcat所需的存储空间是通过StorageClass分配的,请您在kubernetes上准备好helm,我这里用的是2.16版本
  2. helm的安装和使用请参考《部署和体验Helm(2.16.1版本)》

tomcat使用StorageClass实战

  1. 增加helm仓库(带有tomcat的仓库):helm repo add bitnami https://charts.bitnami.com/bitnami
  2. 下载tomcat的chart:helm fetch bitnami/tomcat
  3. chart下载成功后,当前目录出现tomcat配置压缩包tomcat-6.2.4.tgz,解压:tar -zxvf tomcat-6.2.4.tgz
  4. 解压得到tomcat文件夹,进入后打开values.yaml文件,找到persistence节点,增加下图红框中的内容:
  5. 在tomcat目录下执行命令:
helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
  1. 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的30300:
  2. 浏览器访问宿主机IP:30300,出现tomcat欢迎页面:
  3. 去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存储相关的知识,希望本文能给您一些参考;

欢迎关注我的公众号:程序员欣宸

K8S的StorageClass实战(NFS)相关推荐

  1. K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间

    系列文章目录 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:Statefu ...

  2. K8S持久化存储:NFS+StorageClass实现动态供给

    K8S持久化存储:NFS+StorageClass实现动态供给 一.简介:K8S中的持久化存储 二.部署nfs-provisioner 三.创建StorageClass 四.实验 实验1:部署depl ...

  3. k8s之StorageClass(NFS)

    k8s之StorageClass(NFS) 实验环境 k8s环境参考: k8s-v1.20.10 二进制部署指导文档 NFS-Subdir-External-Provisioner 简介 NFS-Su ...

  4. HA RabbitMQ on K8s helm部署实战

    RabbitMQ on K8s helm部署实战 获取helm chart 修改必要参数 外部如何访问? 安装rabbitmq 登录管理界面 导入mq metadata 优化 helm chart 生 ...

  5. JIRA on K8s helm部署实战

    JIRA on K8s helm部署实战 jira on k8s实战 waht? 架构 如何选择chart 官方的chart mox 的chart [1]mox chart 安装脚本 [2]生产环境的 ...

  6. [Kubernetes]PV,PVC,StorageClass实战----|||

    第一篇: [Kubernetes]PV,PVC,StorageClass实战----| 第二篇: [Kubernetes]PV,PVC,StorageClass实战----|| 官网 Storage ...

  7. k8s存储+storageclass自动创建pv+StatefulSet自动创建pvc

    k8s存储 k8s存储 storageclass自动创建pv StatefulSet k8s存储 docker存储----k8s存储 docker的容器层可以提供存储:存储在可写层(CopyOnWri ...

  8. (2022版)一套教程搞定k8s安装到实战 | Ingress

    视频来源:B站<(2022版)最新.最全.最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支 ...

  9. (2022版)一套教程搞定k8s安装到实战 | 临时容器

    视频来源:B站<(2022版)最新.最全.最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支 ...

最新文章

  1. 1、交换机ARP缓存表分析
  2. 3_8 StateMode 状态模式
  3. python调用sdk的文章_如何使用 python 接入虹软 ArcFace SDK
  4. #if/#else/#endif
  5. 芝麻HTTP: Python爬虫利器之PyQuery的用法
  6. 红皮书:变量、作用域和内存问题(四)
  7. leetcode前缀树java_Java实现 LeetCode 208 实现 Trie (前缀树)
  8. 如何用递归处理一个数组中的数据成为一个树结构_Spark处理的一些业务场景(持续更新ing)...
  9. Winscp指向putty.exe,文件用notepad++打开
  10. WM_DRAWITEM与DrawItem()的讨论
  11. ezd激光雕刻机软件使用笔记。
  12. 好看流光风格个人主页源码
  13. C++ Primer中英文版 (第5版)
  14. 【转】翟永超大牛的 博客,SpringBoot SpringCloud应有尽有,转发请备注
  15. SCHNOKA施努卡:锂电池密封性焊接质量视觉检测
  16. 没有NumLock键的小键盘误触变成方向键
  17. 屌丝Cent OS服务器应用之--SVN
  18. JDBC Driver介绍
  19. CentOS(tlinux)安装php55w失败,Requires: libjpeg.so.62(LIBJPEG_6.2)(64bit)解决办法
  20. JPG插入GPS信息

热门文章

  1. 控制建模matlab练习02:状态空间方程系统
  2. 2021-2027全球与中国360度鱼眼镜头市场现状及未来发展趋势
  3. DCMTK 中源代码中使用 Overlay 的例子
  4. 定价的艺术:苹果和网飞对最优订阅价格的理解
  5. 世界四大汽车生产公司
  6. C55X McBSP
  7. 从库延迟增大,MySQL日志出现InnoDB: page_cleaner: 1000ms intended loop took 17915ms.
  8. Go字符串拼接的方式与性能对比
  9. mysql 分区 less than_mysql分区
  10. 深度强化学习系列: “奖励函数”的设计和设置(reward shaping)