更新与回滚
本页介绍 SwanLab Kubernetes 部署的版本更新与回滚流程。
1. 更新前准备
1.1 了解版本信息
更新前,建议先查看当前部署的版本信息和可用的更新版本。
查看当前 release 和历史版本:
helm list -n <your_namespace>
helm history swanlab-self-hosted -n <your_namespace>其中:
swanlab-self-hosted为默认的 release 名称,可以按需调整为您集群中的 release 名;REVISION为回滚索引,在更新失败或存在其他适配性问题时,该数字可用于随时发起回滚。
1.2 同步远程仓库
# 添加 Helm 仓库(如已添加可跳过)
helm repo add swanlab https://helm.swanlab.cn
# 更新仓库索引
helm repo update
# 列出所有可用版本
helm search repo swanlab/self-hosted --versions1.3 更新前检查清单
WARNING
在更新前,请您确保已完成以下事项:
- 已配置 PVC 及快照策略:请确认用于存储资源服务的 PVC 已成功创建,并已配置好相应的快照策略以保障数据安全。
- 确认镜像仓库可达:您需要保证集群可以访问
repo.swanlab.cn,以保证能够正常拉取镜像 (否则您需要将已知的镜像拉取下来推送到私有仓库)。详见SwanLab 私有化版用到了哪些镜像?。 - 检查镜像 tag 配置:在您的
values.yaml中,确保以下应用的镜像 tag 为空字符串或指定版本 tag,而非latest:swanlab-cloudswanlab-nextswanlab-houseswanlab-server
# values.yaml 示例
image:
repository: repo.swanlab.cn/self-hosted/swanlab-cloud
# tag 置为空字符串 或者版本 tag,如 v2.8.0,不要设置为 latest
tag: ""
pullPolicy: "IfNotPresent"2. 执行更新
您可以根据集群网络环境选择以下两种更新方式之一。
选项一:Helm 仓库更新
如果您的集群节点可以直接访问 Helm 仓库(即集群节点可以直接访问 github.com),可以参考如下命令执行更新:
⚠️ 注意:https://helm.swanlab.cn 的 chart 包在 GitHub Release做版本 tag 索引 , 请提前确认网络连通性!
# 建议先使用 --dry-run 验证模板兼容性
helm upgrade swanlab-self-hosted swanlab/self-hosted \
--version <target_version> \
-f <your_own_values.yaml> \
--namespace <your_namespace> \
--dry-run- 确认无报错后,去掉
--dry-run选项执行更新
选项二:本地 Chart 包更新
如果您的集群节点无法直接访问 Helm 仓库(即集群节点无法直接访问 github.com),可以通过 OCI 方式拉取 chart 包到本地后执行更新:
如遇到 401 认证失败问题,可以通过
helm registry logout xxx.com的形式清除本机此前存在的 helm 登录态。
# 拉取 chart 包到本地
helm pull oci://swanlab-registry.cn-hangzhou.cr.aliyuncs.com/chart/self-hosted --version <target_version>
# 解压 chart 包,预期只有一个 self-hosted/ 文件夹
tar -zxvf self-hosted-<target_version>.tgz然后使用本地 chart 包更新验证:
# 建议先使用 --dry-run 验证模板兼容性
helm upgrade swanlab-self-hosted ./self-hosted/ \
-f <your_own_values.yaml> \
--namespace <your_namespace> \
--dry-run- 确认无报错后,去掉
--dry-run选项执行更新
其中:
--dry-run用于验证更新模板的兼容性,建议每次更新前均做一下模板语法验证。
3. 更新验证
更新完成后,请按照以下步骤验证服务是否正常运行。
3.1 Release 版本号验证
确认 release 版本号已更新:
helm list -n <your_namespace>确保集群中的 Service 和 Pod 均为正常状态, 已经为 deployed。
3.2 Pod 健康状态检查
确保所有 Pod 运行正常:
kubectl get pods -n <your_namespace>所有 Pod 应处于 Running 或 Completed 状态,不应有 CrashLoopBackOff、Error 等异常状态。
3.3 指标上报测试
- 页面访问:确认前端页面可以正常访问,指标可以正常下载
- Python SDK:确认 SDK 连接正常,可正常上传实验
import swanlab
import random
import numpy as np
import time
swanlab.login(
api_key="xxxxx", # 私有化 swanlab 服务下的有效 api_key
host="xxxxxx" # 您的私有化 swanlab 服务域名
)
# 创建一个SwanLab项目
swanlab.init(
# 设置项目名
project="my-first-project",
experiment_name="my-first-experiment",
# 设置超参数
config={
"learning_rate": 0.02,
"architecture": "CNN",
"dataset": "CIFAR-100",
"epochs": 10
}
)
# 模拟一次训练
epochs = 10
offset = random.random() / 5
for epoch in range(2, epochs):
acc = 1 - 2 ** -epoch - random.random() / epoch - offset
loss = 2 ** -epoch + random.random() / epoch + offset
swanlab.log({
"step_time": acc,
"speed": loss
})
# 生成随机噪声图像(64x64 RGB,随机像素值)
random_noise = np.random.randint(0, 255, (64, 64, 3), dtype=np.uint8)
img = swanlab.Image(random_noise, caption="Random Noise")
swanlab.log({
"image": img
})
# [可选] 完成训练,这在notebook环境中是必要的
swanlab.finish()4. 回滚
如果在更新后发现服务无法启动(如 CrashLoopBackOff),或存在其他适配性问题,请通过以下命令立即回滚:
4.1 回滚到上一个版本
helm rollback swanlab-self-hosted -n <your_namespace>4.2 回滚到指定版本
首先查看历史版本,确定要回滚的 REVISION 号:
helm history swanlab-self-hosted -n <your_namespace>然后执行回滚:
helm rollback swanlab-self-hosted <revision_number> -n <your_namespace>回滚完成后,请参照更新验证步骤再次确认服务状态。