Skip to main content
升级会替换镜像标签。新版本在启动时会迁移数据库,而这些迁移必须仅运行一次、由一个 pod 执行,并且在此期间没有任何旧版 pod 在运行。在 Kubernetes 上,这意味着不能对已扩容的 StatefulSet 直接进行滚动更新。
每次升级前,请在停止 Ayakaleaf Pro 的情况下进行一致性备份。请阅读发行说明,了解你要升级到的版本所需的步骤。
开始之前,请在每个运行 Ayakaleaf Pro 的节点上,使用 sudo docker pull 拉取新版本或新配置中列出的所有 TeX Live 镜像。
1

停止 Ayakaleaf Pro

2

备份

MongoDB,可从任意成员执行:
数据卷,通过一个挂载该卷的短期 pod 进行备份(该 pod 会被调度到卷所在的节点):
对 git-bridge 的卷(data-git-bridge-0)执行同样的操作,并保存一份 Secret overleaf-secrets 的副本。如果你的存储支持 VolumeSnapshots,也可以通过对这些卷创建快照达到同样的效果。
3

更改版本并启动

在 40-overleaf.yaml 中设置新标签(45-git-bridge.yaml 中也需设置,且必须使用相同的标签),然后执行:
该 Deployment 使用 strategy: Recreate,因此即使更改了标签,也绝不会同时运行两个版本。

MongoDB 和 Redis

请将它们与 Ayakaleaf Pro 分开升级。对于 MongoDB,请按照更新 MongoDB 进行(每次升级一个主版本,每一步之后设置 featureCompatibilityVersion);当你在 10-mongo.yaml 中更改镜像时,副本集会逐个成员地使用新镜像,因为 StatefulSet 会依次替换 mongo-2、mongo-1 和 mongo-0。

回滚

按上述方式停止 Ayakaleaf Pro,从归档文件恢复 MongoDB(mongorestore --drop --archive --gzip),并从备份中恢复卷或存储桶,设置旧标签后重新启动。除此之外,新版本的迁移无法撤销。

Q&A

回答:在 podManagementPolicy: OrderedReady 下,overleaf-1 只有在 overleaf-0 就绪后才会启动,并且滚动更新不会替换从未就绪的 pod。修复原因(例如 ConfigMap 中的错误设置)之后,请删除卡住的 pod,使 StatefulSet 根据当前模板重新创建它:
我们在测试集群上遇到过这种情况:某个设置导致 overleaf-0 无法就绪;删除该 pod 后,三个副本全部成功启动。
最后修改于 2026年11月2日