longhorn stuck upgradewaitforoldlonghornmanagerstobefullyremoved
本文永久链接: https://www.xtplayer.cn/longhorn/stuck-upgrade-waitforoldlonghornmanagerstobefullyremoved/
问题描述
在访问 Longhorn UI 时,页面报 Request failed with status code 502 错误。搜集 Longhorn pod 日志后,发现在 longhorn-manager Pod 的日志中,观察到以下信息持续输出。
time="2026-07-07T09:50:13.702201949Z" level=info msg="Found old longhorn manager: longhorn-manager-chb2n with image xxx.xxx.cn/longhornio/longhorn-manager:v1.11.1" func=upgrade.waitForOldLonghornManagersToBeFullyRemoved file="upgrade.go:316" |
从 pod 状态看,所有 longhorn 相关的 pod 运行状态都正常。根据反馈,在出现问题之前,有修改过 longhorn-manager DaemonSet 的镜像地址。因为默认的 docker.io 仓库地址无法访问,因此将地址修改为内部的私有镜像仓库地址。
原因分析
日志 Found old longhorn manager... 表明 Longhorn 的升级控制器在等待旧的 longhorn-manager Pod 被完全移除后,再启动新版本,但这个等待过程卡住了。
Longhorn 通过 Pod 的镜像名来识别“旧的” manager pod。您日志中的镜像地址是 xxx.xxx.cn/longhornio/longhorn-manager:v1.11.1。如果这个地址与当前运行的 longhorn-manager DaemonSet 中定义的镜像地址不完全一致(例如,一个包含 IP,另一个是域名,或标签不一致),Longhorn 可能会将自己错误地识别为“旧的” manager,导致启动逻辑进入死循环。
在 longhorn-manager DaemonSet yaml 配置中可以看到如下的内容:
containers: |
其中可以看到 --manager-image 自定了镜像名称,通过 helm chart 安装或者更新时,--manager-image 镜像和 longhorn-manager DaemonSet 镜像名称是相同的,https://github.com/longhorn/longhorn/blob/master/chart/templates/daemonset-sa.yaml#L46 。因此通过 helm chart 安装安装或者升级,不会出现此问题。因此如果要调整 longhorn-manager DaemonSet 的镜像名称,那么需要将 --manager-image 以及其他定义的镜像同时修改。


