K8S的StorageClass实战(NFS)
【摘要】 在使用helm过程中,发现很多chart都需要持久化存储资源,因此在K8S环境提前准备好StorageClass是很有必要的
欢迎访问我的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搭建的更多信息,请参考:
- 如果您已经准备好了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存储相关的知识,希望本文能给您一些参考;
欢迎关注华为云博客:程序员欣宸
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)