目前搭建本地 k8s 集群的方案还挺多的,有官方的 minikube,也有第三方的 k3sk3dKubeKey 等等。简单的测试其实用 k3s 搭个单节点测试就好,但遇到有反亲和规则的 Helm chart 就拉不起来了,所以要么多弄几台机器做分布式集群,要么就用套娃式的虚拟化方案做出多节点来。

现在手头就一台高配物理机,套娃就套娃吧。一开始看 minikube 在 https://github.com/kubernetes 下应该很靠谱才对,但是一个 MySQL 数据库都没拉起来,看报错是文件权限问题。不过 bitnami 的 chart 文档里已经给出了解决方案,启用 volumePermissions.enabled 就可以自动添加一个初始化容器执行 chmod。看起来还行,我把相关子 chart 都启用了这个配置,helm install 也成功了。可这 chart 它不讲武德,竟然在最后的 init 容器里又执行了一次 helm install,比我还能套娃。

这套娃 chart 代码在容器里不是很好改,还是老老实实看怎么让 fsGroup 生效吧。谷歌一下找到 #1990 (comment) 这个 issue,k8s 的 hostPath PV 实现不支持用 fsGroup 配置权限,minikube 和 k3d (rancher/local-path-provisioner#41) 同时中招。

查了好久也没找到合适的方案,看来只能试试非正当手段了。能不能在 hostPath 创建好目录之后,马上把权限改对呢?脏是脏了点,但能抓住老鼠就是好猫。正好 k3d 创建集群时能指定 --volume,直接把宿主机上的目录 mount 进去,然后 for 循环 chmod,总算是顺利把套娃的 helm install 也搞定了。

后记

全都搞定之后才发现 OpenEBS 似乎能解决问题,KubeKey All-in-One 模式也能一键安装,不过懒得折腾了。

后来还发现 minikube 提供的 StorageClass 还不支持多节点集群 (#12165),官方这么惨大家快去欺负(帮忙)。

标签: k8s

添加新评论