公司目前是 springboot 微服务 + mysql/minio/redis/redis-sentinel 的服务搭配
在企业版环境下,springboot 这套部署在 k8s 集群上面,mysql 这些是直接用的云厂商提供的服务 在私有部署环境下,springboot 这套部署在 k8s/k3s 集群上面,mysql 这些是直接装在机器上面
我现在想将私有化部署的 mysql 这些也放到 k8s 集群中运行,主要考虑是:
使得部署起来更加方便
1.1 目前服务的安装部署太麻烦麻烦,就算用 ansible 脚本,还是需要去适配不同的操作系统,而且对于离线部署的情形也是方便了许多,直接一个镜像就搞定,否则还需要去下载离线软件包/离线软件镜像,如果软件存在依赖那就很麻烦...
1.2 因为 mysql 部署完需要创建库表,redis 部署完需要加载 lua 脚本,minio 部署完需要创建 bucket 等,虽然用一些脚本可以做到,还是感觉不太方便。用 k8s 的话,用 job/initContainer/sidecar 之类的就可以自动搞定,写成 helm 模板就可以一键部署,很方便
提高对机器资源的利用。目前我们给客户做私有化部署的话,如果是钱多的客户,会给 mysql, redis, minio 每个服务分别给机器;如果是钱少的客户,最终讨论下来的结果一般是 将几个服务挤在一台机器上面,这样虽然可以,但是不好限制不同服务进程的资源占用,可能会存在某个服务影响其他服务的情况。部署到集群中的话,限制服务的资源就很容易
部署到集群中,对于备份、监控等设施,都可以做得相对集中,易于维护。不需要搞各种脚本,那样太离散了,很容易搞错搞漏
可能存在的挑战或者问题,我能想到的大概是
存储问题,目前看起来使用 local pv 或者 local-path-provisioner 是最好的选择,但这个毕竟不是共享存储的方式,因此还是会将 mysql 这些分别固定在某个特定节点上,这样做丢失了 k8s 调度的优势
目前可能只能做单实例,没法做到真正的高可用。对于 mysql 主从,mysql cluster 可能会有问题:一方面可用的经验不多,另一方面可能服务本身不太适合上 k8s 集群,比如 redis sentinel 自身对于服务的监控和 k8s 对服务的监控和重启可能会存在冲突...
mysql/minio 好像有官方那个的 operator ,但是我担心把握不住或者不够自定义化,大概率不会去用这些 operator ,而是自己写 yaml ,可能会比较麻烦,还有 redis sentinel 这种,目前要怎么做心里还没底
性能问题,比如 mysql ,在 k8s 中性能到底怎么样还是个未知数,可能需要做实验测一测
因为我只会做单实例,不会做高可用,所以这一套只适合小规模的私有化部署场景( 100 人左右吧),我担心到时候架构图给出去,会被客户 challenge:把 mysql 放到 k8s 中的稳定性问题。因为我看到网上有人提到过这点
有吃过螃蟹的前辈分享一些在 k8s 中使用 mysql/redis/minio 的经验吗?想向大佬们征求一些建议,我实在是纠结得不行...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.