求教 k8s 部署 mysql 问题

2020-08-14 17:50:36 +08:00
 arbit

请教大家一个问题: 公司准备把原来的项目迁移到 k8s 上,像 mysql 和 redis 数据库在生产环境上适合部署到 k8s 集群中吗

因为目前发现的问题就是像 mysql 存储数据目录,有两种方式 1.如果用 nfs 存储会慢, 2.挂载宿主机目录,如果 pod 挂了,k8s 在另外节点上重启,会有数据找不到问题

大家的都是怎么样的部署架构呢

2754 次点击
所在节点    问与答
12 条回复
arbit
2020-08-14 17:54:00 +08:00
有没有大佬能提供下思路呢,是用单独的主机部署 mysql 、redis,还是在 k8s 上有什么好的持久化方案呢
gy911201
2020-08-14 17:54:31 +08:00
如果 nfs 之类的远程硬盘无法满足你的需求, 可以考虑一下使用 localPath 这样的挂载方式, 应该不会路由到其他的节点中.
DJQTDJ
2020-08-14 17:56:09 +08:00
将 mysql 部署到 K8S 中,可以非常便捷地搭建一套测试环境,但是,在生产环境里,并不建议直接将 mysql 部署到 K8S 上。

建议
1: 构建并推送 mysql 镜像
2: 部署 mysql
arbit
2020-08-14 17:57:17 +08:00
@gy911201 因为有两个工作节点,数据目录如果挂载在本机目录的话, 会不会如果 mysql 的 pod 挂了,k8s 在另外一台机器节点上重启了这个 pod,那 mysql 就找不到数据的目录(因为数据目录在老的节点上)
gy911201
2020-08-14 17:59:41 +08:00
@arbit 使用 localPath 格式, 基于亲和性之类的原因, 不会分配到新的节点, 请注意 localPath 与 hostPath 的区别.
可以参考这个资料
https://kubernetes.io/zh/docs/concepts/storage/volumes/#local
zhangtao
2020-08-14 19:29:09 +08:00
redis 倒是比较容易,可以使用 k8s pvc,通过 ceph 等分布式存储。
mysql 涉及到主从切换、binlog 校验等,目前还不太成熟
momocraft
2020-08-14 19:39:31 +08:00
如果真的要在 k8s 做,可以 statefulset + persistentvolume
bowser1701
2020-08-14 22:03:15 +08:00
这种有状态的其实放 k8s 不好,真想上可以去找一个 operator 通过 Helm 安装,就像 apt 一样简单。
Illusionary
2020-08-14 22:32:00 +08:00
MySQL 不建议部署到 K8S 集群中,生产环境尽量部署在云数据库或者宿主机上。
xulolololololo
2020-08-14 22:40:14 +08:00
上家公司只敢在测试环境用 k8s, 使用方式就是定期编译一个 mysql 镜像, 然后测试环境直接用这个镜像. 生产环境我觉得就不要想着把数据库塞到 k8s 里了.
Qusic
2020-08-14 23:23:37 +08:00
> k8s 在另外节点上重启,会有数据找不到问题
[node affinity]( https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) 可破
napsterwu
2020-08-14 23:32:28 +08:00
Kubernetes 如何改变美团的云基础设施
https://mp.weixin.qq.com/s/Df9fjmfTSD8MKg69LaySkQ

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/698319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX