在 Rancher UI 查看 Pod 日志显示已断开连接
本文永久链接: https://www.xtplayer.cn/rancher/viewing-pod-logs-in-the-rancher-ui-will-automatically-disconnect/
在 Rancher UI 中查看日志时,打开日志窗口后,窗口右下角立刻显示“已断开连接”。具体原因有以下几种:
Rancher Local 集群前面的反向代理(如 F5、Nginx、HAProxy )没有正确支持 WebSocket 协议。
如果你是新创建的 rancher 和下游集群,并且 local 集群 ingress 之前有外部的七层负载均衡服务,如 F5、Nginx、HAProxy 服务。那么有可能是七层负载均衡服务没有正确支持 WebSocket 协议。可以根据以下文档,了解外部负载均衡服务需要支持哪些参数。
https://docs.rancher.cn/docs/rancher2.5/installation/resources/F5-7-layer-loadbalancer/
内核资源耗尽
Rancher UI 在查看日志时,底层需要像
tail -f一样实时监听日志文件的变化,这依赖 Linux 的inotify机制。当节点上容器或日志文件数量较多时,默认的监听限制很快就会被用光,导致无法建立新的监视器。在 master 节点执行kubectl -n kube-system logs kube-apiserver-hxl-test-01 -f
可能看到以下错误
failed to create fsnotify watcher: too many open files
这个问题无法在 Rancher 界面直接修复,需要 SSH 登录到运行该 Pod 的 Kubernetes 宿主机上操作。如果集群有多个节点,建议在每个节点上都执行一遍。
- 临时生效(立即解决问题)
在宿主机终端执行以下命令,无需重启任何服务,回到 Rancher 界面刷新即可:
# 增加可监视的文件数量(常见瓶颈)
sysctl -w fs.inotify.max_user_watches=524288
# 增加可创建的监视器实例数(一并调大以防万一)
sysctl -w fs.inotify.max_user_instances=8192永久生效(防止重启后复发)
将配置写入
sysctl配置文件:cat >> /etc/sysctl.conf <<EOF
fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances=8192
EOF
# 重新加载配置
sysctl -p

