K8S 的 StorageClass 实战 (NFS),java 程序设计任务驱动式教程
[](
)如何创建 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 无法使用:
![在这里插入图片描述](https://img-blog.csdni
mg.cn/20200412105124630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JvbGluZ19jYXZhbHJ5,size_16,color_FFFFFF,t_70)
创建 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
评论