最近搭了个Kubernetes集群玩,没有找到关于Mirai没有很好的部署到容器的方案,于是这个方案就诞生了。

https://github.com/Deliay/k8s-mirai

cd helm # 需要按照values.yaml中的内容自行修改 vim ./values.yaml # 安装mirai到你的k8s集群 helm install mirai ./

项目分两个部分,第一部分是容器化的mirai各种必须组件,第二部分是helm chart帮助你自动创建各种mirai需要的资源。

容器化的Mirai

默认的容器化Mirai 我在 这里 做了一个基本的打包模板,里面包含了基本的几个插件:

fix-protocol-version-1.9.10.mirai2 mirai-api-http-2.9.1.mirai2 mcl-addon-2.1.1

为了容器的「不可变」,本方案不推荐在运行时动态的安装插件,默认提供的镜像如果不满足需求,推荐手动重新构建属于自己的docker镜像。

另外项目中还做了github actions来持续编译你docker镜像,更的事情是你可以参考 这个actions 的实现来全自动将你更新的镜像部署到你的Kubernetes集群。

容器化的签名服务

使用 unidbg-fetch-qsign-container 这个项目,也可以使用这个项目的Dockerfile来打包自己的签名服务,这个项目默认只支持8.9.63, 8.9.68, 8.9.70这几个版本。

Helm Chart

配置文件通过values.yaml管理,自动挂载到容器中,这个Chart还会帮你创建用于持久化登录、日志的PVC。

部署资源一览

默认情况下将会部署下列资源

mirai (本体) mirai-sign (签名服务) mirai-service (mirai-api内网暴露) mirai-sign-service (签名服务内网暴露) mirai-bots-pvc (用于存储登录状态) mirai-logs-pvc (用户存储日志) 配置管理

values.yaml会管理和自动生成 mirai-api-http 和unidbg-fetch-qsign的配置(因为这两个需要暴露端口),其他配置文件通过values.yaml中的configuration挂载到容器中,path指定要覆盖的路径,content为文件内容,这部分配置在容器启动时,覆盖到容器中。

configurations: - name: accountLogin path: config/Console/AutoLogin.yml content: |- ...自动登录相关设置 - name: xxxBlaBlaBla path: config/XXX插件/BlaBla.yml content: |- ...BlaBla的配置 如何登录?

本方案暂时没有对登录方面有任何的建树,我是手动覆盖mirai-bots-pvc中的文件实现的登录,期待其他大佬的方案。

日常管理 更新配置

如果需要修改配置,则直接修改 values.yaml 的值,然后 helm upgrade 之后 kubectl rollout 你部署的release即可。

# 我的release是mirai,namespace也是mirai helm upgrade -n mirai mirai -f ./values.yaml kubectl rollout restart -n mirai deployment/mirai 执行命令

镜像打包方案是基于mcl的,可以直接kubectl attach到容器中去和mcl交互

kubectl attach -n mirai -it deployment/mirai > ...这里就可以和mcl交互了...