Kubernetes Logging Architecture

查看原文

Kubernetes 没有内建的日志收集组件,需要自行安装。对于服务器端程序,日志收集的重要性不言而喻。 在 k8s 的环境中,有一个特殊的需求:container/pod/node 挂了,我们还需要看到它们的日志。 这就要求我们需要在 cluster 内部实现 cluster-level-logging,外部配置一个 logging 后端。

日志分两种,容器日志和非容器日志(例如 kubelet), 所有系统日志都会通过 stdout,stderr 输出到 /var/log (glog 库)。 所有容器日志都会输出到 logdriver. Kubernetes 本身不负责 logrotate,Logdriver 例如 Docker 会有 log-opt 这样的工具来做。

一些 Cluster-level logging architectures 的解决方案:

  • 使用 DaemonSet 安装 logging agent 到每台节点
  • Application pod 安装 sidecar container 专门用于日志处理
  • Application 内部直接用 Push 日志到后端。