本文永久链接: https://www.xtplayer.cn/rancher/viewing-pod-logs-in-the-rancher-ui-will-automatically-disconnect/

在 Rancher UI 中查看日志时,打开日志窗口后,窗口右下角立刻显示“已断开连接”。具体原因有以下几种:

  1. 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/

    https://docs.rancher.cn/docs/rancher2.5/installation/resources/advanced/single-node-install-external-lb/#3%E9%85%8D%E7%BD%AE%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8

  2. 内核资源耗尽

    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