最近搭了个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交互了...