请教大家一个问题: 公司准备把原来的项目迁移到 k8s 上,像 mysql 和 redis 数据库在生产环境上适合部署到 k8s 集群中吗
因为目前发现的问题就是像 mysql 存储数据目录,有两种方式 1.如果用 nfs 存储会慢, 2.挂载宿主机目录,如果 pod 挂了,k8s 在另外节点上重启,会有数据找不到问题
大家的都是怎么样的部署架构呢
1
arbit OP 有没有大佬能提供下思路呢,是用单独的主机部署 mysql 、redis,还是在 k8s 上有什么好的持久化方案呢
|
2
gy911201 2020-08-14 17:54:31 +08:00
如果 nfs 之类的远程硬盘无法满足你的需求, 可以考虑一下使用 localPath 这样的挂载方式, 应该不会路由到其他的节点中.
|
3
DJQTDJ 2020-08-14 17:56:09 +08:00 via iPhone
将 mysql 部署到 K8S 中,可以非常便捷地搭建一套测试环境,但是,在生产环境里,并不建议直接将 mysql 部署到 K8S 上。
建议 1: 构建并推送 mysql 镜像 2: 部署 mysql |
4
arbit OP @gy911201 因为有两个工作节点,数据目录如果挂载在本机目录的话, 会不会如果 mysql 的 pod 挂了,k8s 在另外一台机器节点上重启了这个 pod,那 mysql 就找不到数据的目录(因为数据目录在老的节点上)
|
5
gy911201 2020-08-14 17:59:41 +08:00
@arbit 使用 localPath 格式, 基于亲和性之类的原因, 不会分配到新的节点, 请注意 localPath 与 hostPath 的区别.
可以参考这个资料 https://kubernetes.io/zh/docs/concepts/storage/volumes/#local |
6
zhangtao 2020-08-14 19:29:09 +08:00
redis 倒是比较容易,可以使用 k8s pvc,通过 ceph 等分布式存储。
mysql 涉及到主从切换、binlog 校验等,目前还不太成熟 |
7
momocraft 2020-08-14 19:39:31 +08:00 1
如果真的要在 k8s 做,可以 statefulset + persistentvolume
|
8
bowser1701 2020-08-14 22:03:15 +08:00 via iPhone
这种有状态的其实放 k8s 不好,真想上可以去找一个 operator 通过 Helm 安装,就像 apt 一样简单。
|
9
Illusionary 2020-08-14 22:32:00 +08:00
MySQL 不建议部署到 K8S 集群中,生产环境尽量部署在云数据库或者宿主机上。
|
10
xulolololololo 2020-08-14 22:40:14 +08:00
上家公司只敢在测试环境用 k8s, 使用方式就是定期编译一个 mysql 镜像, 然后测试环境直接用这个镜像. 生产环境我觉得就不要想着把数据库塞到 k8s 里了.
|
11
Qusic 2020-08-14 23:23:37 +08:00
> k8s 在另外节点上重启,会有数据找不到问题
[node affinity]( https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) 可破 |
12
napsterwu 2020-08-14 23:32:28 +08:00
Kubernetes 如何改变美团的云基础设施
https://mp.weixin.qq.com/s/Df9fjmfTSD8MKg69LaySkQ |