1

我目前正在将旧服务器迁移到 Kubernetes,我发现kubectl仪表板或仪表板只显示最新的日志文件,而不是旧版本。为了访问旧文件,我必须 ssh 到节点机器并搜索它。

除了麻烦之外,我的团队还希望限制对节点机器本身的访问,因为它们将运行来自许多不同团队的 Pod,并且不受限制的访问可能是一个安全问题。

所以我的问题是:我可以配置 Kubernetes(或 Docker 映像),以便将这些旧的(旋转的)日志文件存储在可以从 pod 本身内部访问的某个目录中吗?

  • 当然,在紧要关头,我可能只是run_server.sh | tee /var/log/my-own.log在 pod 启动时执行一些操作……但是,为了正确执行,我必须添加整个日志文件轮换功能,基本上是复制 Kubernetes 已经在做的事情。
4

1 回答 1

4

因此,有几种方法和场景。如果你只是对上次重启之前的同一个 pod 的日志感兴趣,你可以使用--previousflag 查看日志:

kubectl logs -f <pod-name-xyz> --previous

但是,由于在您的情况下,您有兴趣查看超过一次轮换的日志文件,因此您可以这样做。将 sidecar 容器添加到您的应用程序容器中:

 volumeMounts:
    - name: varlog
      mountPath: /tmp/logs
  - name: log-helper
    image: busybox
    args: [/bin/sh, -c, 'tail -n+1 -f /var/log/*.log']
    volumeMounts:
    - name: varlog
      mountPath: /tmp/logs
volumes:
  - name: varlog
    hpostPath: /var/log

这将允许包含/var/log从主机目录到/tmp/log容器内部的所有日志的目录,并且该命令将确保刷新所有文件的内容。现在你可以运行:

kubectl logs <pod-name-abc> -c count-log-1

此解决方案取消了 SSH 访问,但仍需要访问 kubectl 并添加一个 sidecar 容器。我仍然认为这是一个糟糕的解决方案,您考虑了 Kubernetes 的集群级日志记录架构文档中的一个选项,例如12

于 2018-06-07T09:52:45.420 回答