跳转到内容

更新与回滚

本页介绍 SwanLab Kubernetes 部署的版本更新与回滚流程。


1. 更新前准备

1.1 了解版本信息

更新前,建议先查看当前部署的版本信息和可用的更新版本。

查看当前 release 和历史版本:

bash
helm list -n <your_namespace>
helm history swanlab-self-hosted -n <your_namespace>

其中:

  • swanlab-self-hosted 为默认的 release 名称,可以按需调整为您集群中的 release 名
  • REVISION回滚索引,在更新失败或存在其他适配性问题时,该数字可用于随时发起回滚。

1.2 同步远程仓库

bash
# 添加 Helm 仓库(如已添加可跳过)
helm repo add swanlab https://helm.swanlab.cn

# 更新仓库索引
helm repo update

# 列出所有可用版本
helm search repo swanlab/self-hosted --versions

1.3 更新前检查清单

WARNING

在更新前,请您确保已完成以下事项:

  1. 已配置 PVC 及快照策略:请确认用于存储资源服务的 PVC 已成功创建,并已配置好相应的快照策略以保障数据安全。
  2. 确认镜像仓库可达:您需要保证集群可以访问 repo.swanlab.cn,以保证能够正常拉取镜像 (否则您需要将已知的镜像拉取下来推送到私有仓库)。详见SwanLab 私有化版用到了哪些镜像?
  3. 检查镜像 tag 配置:在您的 values.yaml 中,确保以下应用的镜像 tag 为空字符串或指定版本 tag,而非 latest
    • swanlab-cloud
    • swanlab-next
    • swanlab-house
    • swanlab-server
yaml
# 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 索引 , 请提前确认网络连通性!

bash
# 建议先使用 --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 登录态。

bash
# 拉取 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 包更新验证:

bash
# 建议先使用 --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 版本号已更新:

bash
helm list -n <your_namespace>

确保集群中的 Service 和 Pod 均为正常状态, 已经为 deployed

3.2 Pod 健康状态检查

确保所有 Pod 运行正常:

bash
kubectl get pods -n <your_namespace>

所有 Pod 应处于 RunningCompleted 状态,不应有 CrashLoopBackOffError 等异常状态。

3.3 指标上报测试

  • 页面访问:确认前端页面可以正常访问,指标可以正常下载
  • Python SDK:确认 SDK 连接正常,可正常上传实验
python
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 回滚到上一个版本

bash
helm rollback swanlab-self-hosted -n <your_namespace>

4.2 回滚到指定版本

首先查看历史版本,确定要回滚的 REVISION 号:

bash
helm history swanlab-self-hosted -n <your_namespace>

然后执行回滚:

bash
helm rollback swanlab-self-hosted <revision_number> -n <your_namespace>

回滚完成后,请参照更新验证步骤再次确认服务状态。