K8S的StorageClass实战(NFS)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在使用helm过程中,发现很多chart都需要持久化存储资源,因此在K8S环境提前准备好StorageClass是很有必要的

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

关于StorageClass

在这里插入图片描述

本次实战

  • 本次实战的目标是快速创建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

  • 创建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-storageclasskubectl logs -f xxxxxx -n hello-storageclass命令查看provisioner是否成功创建,下图是我曾经遇到的问题,NFS服务端权限设置有误导致NFS无法使用:

在这里插入图片描述

在这里插入图片描述

  • 至此,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
  • 下载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存储相关的知识,希望本文能给您一些参考;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
138 0
|
1月前
|
存储 Kubernetes 开发工具
k8s练习--StorageClass详细解释与应用
本文介绍了Kubernetes中的`StorageClass`,这是一种用于定义不同存储提供者配置的抽象机制,能够动态生成PersistentVolume(PV),简化存储管理。文中详细描述了如何在K8s集群中配置和使用`StorageClass`,包括搭建NFS服务器、配置RBAC权限、创建StorageClass及关联PVC和Pod的过程,并通过实验验证了动态PV的创建和删除功能。实验环境包含一个Master节点和两个Node节点,以及一台NFS服务器。
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
3月前
|
存储 Kubernetes 开发工具
k8s练习--StorageClass详细解释与应用
本文档详细介绍如何在Kubernetes中使用StorageClass动态创建PersistentVolume (PV),以简化大量PV的手动配置工作。StorageClass作为一种动态存储供给机制,
|
3月前
|
存储 Kubernetes 网络安全
[k8s]使用nfs挂载pod的应用日志文件
[k8s]使用nfs挂载pod的应用日志文件
168 1
|
3月前
|
存储 运维 Kubernetes
k8s学习笔记之StorageClass+NFS
k8s学习笔记之StorageClass+NFS
|
3月前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
164 0
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
3月前
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
61 0
|
6月前
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
610 0
下一篇
无影云桌面