整体思想

各helm chart编写

分类 包含 说明
ingress-controller nginx-ingress 目前主流的ingress-controller有三个,istio,traefik,nginx。其中nginx不具有流量控制功能,istio不能在非k8s环境使用,traefik是最好选择,可以先继续使用nginx后面过度到traefik。需要配置http和ws走相同端口。
业务服务模块 openim-api,openimmsg-gateway,openim-push,openim-msgtransfer,openim-rpc-*,前端模块 建议对里面轻量级负责数据库存储的rpc服务进行合并到openim-api。服务分太细维护性增加了,多个服务访问相同数据库表也不符合微服务规范
基础架构模块 mysql,redis,mongodb,kafka,loki,Prometheus,grafana;zookeeper 维护一个稳定的开源helm chart和默认value,推送到我们自己的helm repo,这样客户一键安装不会因为网络原因安装不了,同时也便于我们维护
全局配置文件openim.yaml 覆盖所有业务模块helm的value.yaml 抽象一些全局相同的配置信息到openim.yaml,这样方便修改一处就渲染全部value.yaml。比如基础架构的账户,url信息,pvc路径映射信息等
shell脚本 对服务选择性进行Installation,restart,delete。 shell要能捕获到helm安装成功或者失败,完成基础的模板化和自动化功能

helm chart 目录如下:

https://wdcdn.qpic.cn/MTY4ODg1NDc5OTQ3MTMwMw_344519_vqHmjF7xlPMUz1ht_1694910900?sign=1694915159-592367056-0-b8360271e7d98a1b531eb3a5713ceb85

按需要选择模板:configmap,pv,pvc,deployment,ingress,service,serviceaccount。

应用配置文件适配

服务需要的配置信息一律通过yaml配置文件进行传递,启动命令为 openim -c /data/openim/config.yaml,如果没有传递-c /data/openim/config.yaml,程序默认从/data/服务名称/config.yaml读配置文件。配置文件包含一切程序运行需要的配置信息,包括端口,日志路径,中间件信息,下游服务信息等。

在二进制部署中,配置文件通过-c /data/openim/config.yaml命令行参数传递进去;在docker-compose模式通过映射配置文件进容器的/data/服务名称/目录进行传递;在k8s模式通过创建configmap,在deployment把configmap映射进容器/data/服务名称/目录进行传递。构建容器镜像endpoint 启动命令不需要传递参数。

应用服务发现与服务注册的适配

因为k8s部署的服务,自带有服务器发现服务注册机制,不需要discoveryregistry.SvcDiscoveryRegistry代码模块和zookeeper组件。建议在各业务模块在discoveryregistry.SvcDiscoveryRegistry上面再封装一层,如果发现是docker-compose和二进制部署继续走原来流程,如果是k8s部署走servicename的内部域名通信。

修改点

github actions→ CICD