组件更新
滚动更新TensorFusion组件
本页说明如何更新 TensorFusion Operator、AlertManager、Hypervisor、Worker、Client 注入镜像和相关配置。
更新前检查
先确认集群和 GPU 池处于稳定状态:
kubectl get tensorfusionclusters
kubectl get gpupool
kubectl get gpunode,gpu -o wide
kubectl -n tensor-fusion-sys get pod -o wide如果业务正在运行,请确认业务 Deployment / StatefulSet 已配置合理的副本数、readinessProbe 和 PDB。组件滚动期间不要同时大规模变更业务资源请求,避免把升级问题和调度问题混在一起。
生产集群升级前先保留当前 Helm values 和 TensorFusionCluster 清单。回滚时仅靠 Helm revision 不一定能覆盖手动改过的 GPU 池配置。
更新 Helm Chart
中国大陆网络环境:
helm repo update
helm upgrade --install --create-namespace --namespace tensor-fusion-sys \
--repo https://download.tensor-fusion.ai \
-f https://download.tensor-fusion.ai/values-cn.yaml \
tensor-fusion-sys tensor-fusion国际网络环境:
helm repo update
helm upgrade --install --create-namespace --namespace tensor-fusion-sys \
--repo https://download.tensor-fusion.ai \
tensor-fusion-sys tensor-fusion纯本地部署且不接入 ClusterAgent 时,需要继续保留 agent.agentId="":
helm upgrade --install --create-namespace --namespace tensor-fusion-sys \
--repo https://download.tensor-fusion.ai \
--set agent.agentId="" \
tensor-fusion-sys tensor-fusion更新后观察控制面组件:
kubectl -n tensor-fusion-sys rollout status deployment/tensor-fusion-sys-controller-manager
kubectl -n tensor-fusion-sys get pod -l tensor-fusion.ai/component=alert-manager更新 GPU 池组件
Hypervisor、Worker、Client 的镜像和 Pod 模板在 TensorFusionCluster.spec.gpuPools[].specTemplate.componentConfig 中配置。修改这些配置后,GPUPool Controller 会按 nodePoolRollingUpdatePolicy 滚动更新对应组件。
示例:
apiVersion: tensor-fusion.ai/v1
kind: TensorFusionCluster
metadata:
name: tensor-fusion
spec:
gpuPools:
- name: shared
specTemplate:
componentConfig:
client:
image: tensorfusion/tensor-fusion-client:latest
remoteModeImage: tensorfusion/tensor-fusion-client:latest
embeddedModeImage: tensorfusion/tensor-fusion-client:latest
hypervisor:
image: tensorfusion/tensor-fusion-hypervisor:latest
worker:
image: tensorfusion/tensor-fusion-worker:latest
nodeManagerConfig:
nodePoolRollingUpdatePolicy:
autoUpdateClient: true
autoUpdateHypervisor: true
autoUpdateWorker: true
batchPercentage: 20
batchInterval: 1s常用字段:
| 字段 | 作用 |
|---|---|
autoUpdateClient | Client 注入镜像或配置变更后自动更新 |
autoUpdateHypervisor | Hypervisor 镜像或配置变更后自动更新 |
autoUpdateWorker | Worker 镜像或配置变更后自动更新 |
batchPercentage | 每批更新节点比例,建议 1-100,默认 100 |
batchInterval | 批次之间的等待时间,默认 1s |
当前滚动更新逻辑实际消费 autoUpdateClient / autoUpdateHypervisor / autoUpdateWorker、batchPercentage 和 batchInterval。CRD 中虽然存在 maintenanceWindow 和 maxDuration 字段,但当前 controller 不依赖它们控制更新窗口;生产维护窗口请通过变更流程、暂停自动更新或分批修改清单来控制。
观察组件更新进度:
kubectl get gpupool tensor-fusion-shared -o jsonpath='{.status.componentStatus}{"\n"}'
kubectl -n tensor-fusion-sys get pod -o wide当 componentStatus 中对应组件的 *UpdateProgress 到 100,且 *ConfigSynced 为 true,说明该组件配置已同步完成。
轮换 Secret
许可证、镜像仓库凭据、云厂商凭据等敏感信息应通过 Secret 注入。轮换时建议按以下顺序执行:
- 创建新的 Secret,或用
kubectl apply原地更新 Secret。 - 更新引用该 Secret 的 Helm values 或
TensorFusionClusterPod 模板。 - 滚动控制面或 GPU 池组件。
- 确认新 Pod 已读取新 Secret,再删除旧 Secret。
许可证 Secret 示例可参考管理许可证。
如果 Secret 内容已经更新,但相关 Pod 没有自动重建,可以手动重启控制面 Deployment:
kubectl -n tensor-fusion-sys rollout restart deployment/tensor-fusion-sys-controller-manager
kubectl -n tensor-fusion-sys rollout status deployment/tensor-fusion-sys-controller-manager对于 Worker / Hypervisor 这类由 TensorFusion 管理的 Pod,优先通过 TensorFusionCluster 模板变更触发滚动更新;只有确认模板已更新但旧 Pod 未滚动时,才删除对应旧 Pod,让控制器重建。
回滚
如果升级后出现异常,先回滚 Helm release:
helm -n tensor-fusion-sys history tensor-fusion-sys
helm -n tensor-fusion-sys rollback tensor-fusion-sys <revision>如果异常来自 GPU 池组件镜像或模板配置,回滚 TensorFusionCluster 中的 componentConfig,然后观察 GPUPool 更新状态。
验收
kubectl get tensorfusionclusters
kubectl get gpupool
kubectl -n tensor-fusion-sys get pod
kubectl get events -A --sort-by='.lastTimestamp' | tail -n 30最后运行一个已启用 TensorFusion 注解的测试 Pod,确认业务容器仍能看到预期的虚拟 GPU 资源。