kubernetes提供的local path给持久化提供了相当大的便利, 但有一个问题是, 每次都需要手动提前在机器上创建相应的目录来做为被调度应用的持久化目录, 不是很方便, 有没有办法可以自动创建呢?
对于rancher平台,rancher也提供了相应的工具local-path-provisioner
使用
1 | apiVersion: v1 |
yaml文件几乎可以不用动直接部署, 部署之后在集群中就会出现一个名为local-path的storeclass
这样,如果一个应用需要使用某台机器的本地目录做为持久化,需要二步操作
- 调度到这台机器上
- 使用pvc时指定storeclass为local-path
使用官方的例子
1 | apiVersion: v1 |
kubectl apply -f
查看pv/pvc绑定情况
1 | $ kubectl get pv |
可以看到pv/pvc绑定成功了且应用的持久化目录在机器的/data目录下
配置文件
1 | kind: ConfigMap |
配置里是可以对不同的node指定不同的path, 如果未指定node, 则使用默认值
不足
通过这种方式我们可以不再需要生成pv, 直接使用pvc即可,但还是有些不足的地方,目前还不支持对持久化目录做到可以限制使用大小
另外,kubernetes sig也出了一个对于local volume的工具sig-storage-local-static-provisioner相对来说更加通用,但是也有不足的地方,感兴趣的可以参考