K8S的StorageClass实战(NFS)

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

关于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地址<font color="blue">192.168.50.135</font>,文件夹<font color="blue">/volume1/nfs-storageclass-test</font>

参考文章

如果您想了解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:<font color="blue">kubectl create namespace hello-storageclass</font>
  2. 创建<font color="blue">rbac</font>的脚本直接从我的github下载吧,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/rbac.yaml
  3. 下载的rbac.yaml文件中,namespace是<font color="blue">kafka-test</font>,现在要替换成<font color="red">hello-storages</font>,执行命令替换:<font color="blue">sed -i 's/kafka-test/hello-storageclass/' rbac.yaml</font>
  4. 创建rbac:<font color="blue">kubectl apply -f rbac.yaml</font>
  5. 创建provisioner的脚本也从我的github下载,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/deployment.yaml
  6. 下载的deployment.yaml文件中,namespace是<font color="blue">kafka-test</font>,现在要替换成<font color="red">hello-storages</font>,执行命令替换:<font color="blue">sed -i 's/kafka-test/hello-storageclass/' deployment.yaml</font>
  7. 打开deployment.yaml,设置NFS参数,修改下图红框的四个参数,红框1和3都是NFS server地址,红框2和4都是NFS分配的文件夹目录,请您按照实际的NFS资源来设置:

在这里插入图片描述

  1. 创建provisioner:<font color="blue">kubectl apply -f deployment.yaml</font>
  2. <font color="red">强烈建议</font><font color="blue">kubectl describe pod xxxxxx -n hello-storageclass</font><font color="blue">kubectl logs -f xxxxxx -n hello-storageclass</font>命令查看provisioner是否成功创建,下图是我曾经遇到的问题,NFS服务端权限设置有误导致NFS无法使用: 在这里插入图片描述
  3. 创建StorageClass的脚本也从我的github下载,地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/storageclass-demo/class.yaml
  4. 下载的class.yaml无需修改,直接使用:<font color="blue">kubectl apply -f class.yaml</font>
  5. class.yaml中的StorageClass名为<font color="blue">managed-nfs-storage</font>,后面的PVC就用这个名字去申请存储空间;
  6. 用df命令来检查挂载情况,发现NFS的已经挂载到K8S宿主机: 在这里插入图片描述
  7. 至此,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的仓库):<font color="blue">helm repo add bitnami https://charts.bitnami.com/bitnami</font>

  2. 下载tomcat的chart:<font color="blue">helm fetch bitnami/tomcat</font>

  3. chart下载成功后,当前目录出现tomcat配置压缩包<font color="blue">tomcat-6.2.4.tgz</font>,解压:<font color="blue">tar -zxvf tomcat-6.2.4.tgz</font>

  4. 解压得到<font color="blue">tomcat</font>文件夹,进入后打开<font color="blue">values.yaml</font>文件,找到<font color="red">persistence</font>节点,增加下图红框中的内容: 在这里插入图片描述

  5. 在tomcat目录下执行命令:

    helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass

  6. 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的30300:

在这里插入图片描述 7. 浏览器访问<font color="blue">宿主机IP:30300</font>,出现tomcat欢迎页面:

在这里插入图片描述 8. 去NFS server检查磁盘使用情况,如下图,可见已分配给tomcat的PVC,并且写入了tomcat的基本数据: 在这里插入图片描述

清理资源

本次实战创建了各种类型的资源,使用下面的命令可以将其全部清理掉:

1helm del --purge tomcat001 2kubectl delete storageclass managed-nfs-storage 3kubectl delete deployment nfs-client-provisioner -n hello-storageclass 4kubectl delete clusterrolebinding run-nfs-client-provisioner 5kubectl delete serviceaccount nfs-client-provisioner -n hello-storageclass 6kubectl delete role leader-locking-nfs-client-provisioner -n hello-storageclass 7kubectl delete rolebinding leader-locking-nfs-client-provisioner -n hello-storageclass 8kubectl delete clusterrole nfs-client-provisioner-runner 9kubectl delete namespace hello-storageclass

至此,StorageClass的创建和使用的实战就完成了,如果您在学习kubernetes存储相关的知识,希望本文能给您一些参考;

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

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界... https://github.com/zq2599/blog_demos

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )