kubernetes使用本地磁盘进行动态管理pv

前言 使用本地磁盘作为pv kubernetes从1.10版本开始支持local volume(本地卷),workload(不仅是statefulsets类型)可以充分利用本地磁盘的优势,从而获取比remote volume(如nas, nfs, cephfs、RBD)更好的性能。 在local volume出现之前,statefulsets也可以利用本地磁盘,方法是配置hostPath,并通过nodeSelector或者nodeAffinity绑定到具体node上。但hostPath的问题是,管理员需要手动管理集群各个node的目录,不太方便。 以上无论是hostPath还是local volume都不支持动态扩容,并且程序移植改动比较大。 由于项目的需要,需要支持动态创建和扩容pv/pvc 本文参考了以下两个开源项目: https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner https://github.com/rancher/local-path-provisioner 经过测试: kubernetes-sigs版不支持动态扩容/动态供给dynamically provisioning,而且需要提前手动在node节点上创建并且mount对应的挂载点。 Rancher版本的local-path-provisioner支持动态创建挂载点,动态创建pv 下面两种方法都介绍一下安全和使用方式,最后推荐使用第三章介绍的local-path-provisioner来进行动态创建pv 第一章 使用sig-storage-local-static-provisioner 1.1 拉取官方源码进行安装

1.2创建storageclass

1.3挂载磁盘 其Provisioner本身其并不提供local volume,但它在各个节点上的provisioner会去动态的“发现”挂载点(discovery directory),当某node的provisioner在/mnt/fast-disks目录下发现有挂载点时,会创建PV,该PV的local.path就是挂载点,并设置nodeAffinity为该node。 可以用以下脚本通过mount bind方式创建和挂载磁盘

下面是在各个node节点用以上脚本创建挂载点: 执行该脚本后,等待一会,执行查询pv命令,就可以发现自动创建了 1.4测试pod是否可以运行

可以看到, 三个pod都正常运行起来了: 第二章 使用local-path-provisioner 2.1下载yaml文件

2.2 修改 其中有几处需要做修改 2.2.1 删除调试模式 删除–debug 2.2.2修改reclaimPolicy Read more…