k8s以及云原生相关概念近年来一直比较火热,阿丸最近搞了个相关项目,小结一下。
本文将重点分享阿里开源项目otter适配k8s部署的改造过程,其中的改造过程和技巧应该适用于将大多数开源项目改造到k8s进行部署。
1.背景
otter是阿里开源的分布式数据库同步系统,基于数据库增量日志解析,并准实时同步到本机房或异地机房的mysql/oracle数据库(相关内容可以参考https://github.com/alibaba/otter,本文不做过多赘述)。
为了充分利用物理资源、快速扩容同步节点、拥抱云原生,决定使用k8s部署otter。
otter的项目整体上自成一体,出于改造成本考虑,尽量在项目已有基础上,做一些适配,不改动源代码。
本文将重点分享对于otter适配k8s部署的改造过程,有不当之处,还请多多指教。
涉及到几个核心内容:
- otter基本架构
- dockerfile编写
- deployment编写
- 启动脚本改造
- K8s中固定ip/port访问
2.otter的基本架构
典型管理系统架构,manager(web管理)+node(工作节点)
- manager运行时推送同步配置到node节点
- node节点将同步状态反馈到manager上
- 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作
- 基于Canal开源产品,获取数据库增量日志数据。当然,otter采用了canal的嵌入式模式,不是独立的canal节点。
基于以上部署架构,我们只需要将otter-manager和otter-node部署到k8s上。
尤其是otter-node,需要利用k8s实现节点快速水平扩展、计算性能弹性扩缩容。
2.Dockerfile编写
2.1 otter-manager的Dockerfile
otter-manager比较简单,包括几个步骤:
- 使用一个centos的基础镜像
- 设置时区
- 创建目录
- 拷贝下载好的manager.deployer-4.2.18到指定目录
- 使用启动startup-new.sh脚本启动(这里对原本的启动脚本做了一些改造,后文进行详述)
具体如下所示: