从pod内部访问Kubernetes pod的日志文件?

时间:2018-06-07 06:30:11

标签: docker logging kubernetes log-rotation

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

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

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

  • 当然,在一个紧要关头,我可能只是在pod启动时执行run_server.sh | tee /var/log/my-own.log之类的东西......但是,为了正确地执行它,我将不得不添加整个日志文件的旋转功能,基本上复制了Kubernetes已经在做的事情。

1 个答案:

答案 0 :(得分:3)

因此,有几种方法和方案。如果您只是对上次重启前相同pod的日志感兴趣,可以使用--previous标志来查看日志:

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

相关问题