谷歌云Kubernetes Pod上消耗磁盘空间的日志轮换

7
我们在Google Cloud Platform Kubernetes集群中有一个pod,将JsonFormatted写入StdOut。这是由Stackdriver自动处理的。但是,我们发现pod的磁盘使用量不断增长,我们无法理解如何在Deployment上设置最大大小以进行日志轮换。
Google Cloud和Kubernetes的文档对此不太清楚。
这只是最近一小时的情况:

Memory consumption on a Pod


@chisva 刚遇到了同样的问题。在一个 scratch 镜像中只有单个二进制文件,没有文件系统日志,只有标准输出。你解决了吗?磁盘图表是否恢复或平稳了? - Tom Clift
1个回答

2
你确定 Pod 的磁盘使用率高是因为日志吗?如果应用程序将日志写入标准输出,它不会使用 Pod 内部的任何磁盘空间。所有日志通常存储在节点文件系统中的日志文件中,并且可以由节点 logrotate 进程管理。也许应用程序还在使用 Pod 的磁盘空间来存储临时文件或调试信息等其他内容?这是与日志轮换相关的 文档 的一部分。
在节点级别记录日志: 容器化应用程序写入标准输出(stdout)和标准错误(stderr)的所有内容都由容器引擎处理和重定向到某个地方。例如,Docker容器引擎将这两个流重定向到一个日志驱动程序,该驱动程序在Kubernetes中配置为以json格式写入文件。 在节点级别记录日志的一个重要考虑因素是实现日志轮换,以便日志不会占用节点上所有可用的存储空间。 目前,Kubernetes不负责日志轮换,而是部署工具应该设置解决方案来解决这个问题。例如,在kube-up.sh脚本部署的Kubernetes集群中,有一个logrotate工具配置每小时运行。 您还可以设置容器运行时自动轮换应用程序的日志,例如使用Docker的log-opt。 在kube-up.sh脚本中,后一种方法用于GCP上的COS镜像,前一种方法用于任何其他环境。在两种情况下,默认情况下配置的轮换会在日志文件超过10MB时发生。 例如,您可以在相应的script中找到有关kube-up.sh如何设置GCP上COS镜像的日志记录的详细信息。
这是与logrotate有关的脚本的一部分:
# Installs logrotate configuration files
function setup-logrotate() {
  mkdir -p /etc/logrotate.d/
  # Configure log rotation for all logs in /var/log, which is where k8s services
  # are configured to write their log files. Whenever logrotate is ran, this
  # config will:
  # * rotate the log file if its size is > 100Mb OR if one day has elapsed
  # * save rotated logs into a gzipped timestamped backup
  # * log file timestamp (controlled by 'dateformat') includes seconds too. This
  #   ensures that logrotate can generate unique logfiles during each rotation
  #   (otherwise it skips rotation if 'maxsize' is reached multiple times in a
  #   day).
  # * keep only 5 old (rotated) logs, and will discard older logs.
  cat > /etc/logrotate.d/allvarlogs <<EOF
/var/log/*.log {
    rotate ${LOGROTATE_FILES_MAX_COUNT:-5}
    copytruncate
    missingok
    notifempty
    compress
    maxsize ${LOGROTATE_MAX_SIZE:-100M}
    daily
    dateext
    dateformat -%Y%m%d-%s
    create 0644 root root
}
EOF

}

这似乎并不完全正确。使用Docker的max-sizemax-file选项来完成日志轮换。请参阅https://github.com/kubernetes/kubernetes/pull/40634。 - Code
我可以确认以上内容适用于GKE和COS工作节点镜像。 - Leo Y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接