本文永久链接: 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:
- command:
- longhorn-manager
- '-d'
- daemon
- '--engine-image'
- docker.io/rancher/mirrored-longhornio-longhorn-engine:v1.11.2
- '--instance-manager-image'
- >-
docker.io/rancher/mirrored-longhornio-longhorn-instance-manager:v1.11.2
- '--share-manager-image'
- >-
docker.io/rancher/mirrored-longhornio-longhorn-share-manager:v1.11.2
- '--backing-image-manager-image'
- >-
docker.io/rancher/mirrored-longhornio-backing-image-manager:v1.11.2
- '--support-bundle-manager-image'
- docker.io/rancher/mirrored-longhornio-support-bundle-kit:v0.0.84
- '--manager-image'
- docker.io/rancher/mirrored-longhornio-longhorn-manager:v1.11.2
- '--service-account'
- longhorn-service-account
- '--upgrade-version-check'
env:
- name: POD_NAME

其中可以看到 --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 以及其他定义的镜像同时修改。