Kubernetes日志有关知识点有哪些

58次阅读
没有评论

共计 2242 个字符,预计需要花费 6 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 Kubernetes 日志有关知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

关于日志 #1 多种多样的日志

应用程序具有日志,用于排查问题。集群具有日志,用于排查问题。容器环境具有日志机制,容器化应用应将日志写入标准输出与标准错误。

#2 但这些日志机制存在问题

但是由容器引擎提供的日志功能远远不够:容器崩溃,驱逐 POD 实例,节点崩溃,在这些情况下我们依旧希望访问日志。因此日志需要独立存储,并且生命周期与节点、容器等等无关。

该概念被称为“集群日志”。

#3 集群日志

“集群日志”需要单独存储,但是 Kubernetes 并没有提供日志后端存储,需要我们自己集成。本文结合官方「Logging Architecture」文档,整理与日志有关内容。

写入标准输出的日志

使用 kubectl logs 查看日志,添加 –previous 选项查看已崩溃容器的日志。

如果在 POD 实例中具有容器,可以指定容器名查看特定容器日志。

节点级日志类型应用程序日志

由容器应用写入标准输出与标准错误的日志,会被容器引擎重定向。例如在 Docker 中,由日志驱动处理(在 Kubernetes 中,被配置写入 JSON 格式的文件中)。

注意,使用 Docker 日志驱动无法处理多行日志,需要在日志收集工具中进行处理。

如果容器重启,则 kubelet 会保存单个容器及它的日志。若驱逐 POD 实例,所有对应的容器将被驱逐,包括日志。

另外节点日志还要考虑轮转问题,防止日志消耗过多磁盘。但是 Kubernetes 当前不负责日志轮转,这个问题应该由容器应用处理。另外可以可以配置容器环境处理日志轮转,例如使用 Docker 的 –log-opt 选项。

当执行 kubectl logs 时,由对应节点的 kubelet 响应,直接读取日志文件。注意,如果外部系统执行轮转,日志截断为多个文件时,则 kubectl logs 只能读取组后一个文件。

系统组件日志

系统组件也有日志,但是分为两类:(1)运行在容器内的组件;(2)运行在容器外的组件;

运行在容器外的组件,例如 kubelet 及 Docker 等等:如果使用 systemd 管理,则日志写入 journald 中;如果未使用 systemd 管理,则日志写入 /var/log 中;
运行在容器内的组件,例如 kube-proxy 或 scheduler 等等:使用默认日志机制,将日志写入 /var/log 中;

同样,写入 /var/log 中的日志也需要轮转。

集群级日志的解决方案

由于 Kubernetes 没有提供集群日志解决方案,有以下集中途径解决:

 使用节点级日志代理,运行在每个节点中
 使用专用容器(Sidecar),收集应用程序日志
 从应用程序中直接将日志写入后端日志存储 

下面我们将简述各种解决方法

使用节点日志代理

以 DeamonSet 在每个节点运行 POD 实例,用于直接读取日志文件。但是这只适用于将日志写入标准错误与标准输出的容器。

常用解决方案有 Elasticsaerch+Fluentd 服务。

使用专用容器(Sidecar)

使用 Sidecar 容器(与应用容器处于相同 POD 实例的容器),有两种方式:(1)Sidecar 容器将应用日志“流入”自己的标准输出;(2)Sidecar 容器运行日志代理,收集应用程序日志;

# 流式 Sidecar 容器:
当 Sidecar 容器使用自身的标准错误与标准输出时,可以利用 kubelet 与每个节点的日志代理。Sidecar 容器可以读取文件、套接字、journald,然后将日志写入自己的标准错误、标准输出中。

这种方法可以从应用程序不同部分中分离出不同的日志流,即使有些应用程序可能不支持写入标准输入、与标准输出。日志重定向每次只需要处理很小日志,因此不会出现过渡的开销。另外由于 Sidecar 的标准输出与标准错误与 kubelet 处理,因此可以通过 kubectl logs 查看日志。

虽然 Sidecar 是额外的容器,但是它可以简单到只运行 tail 命令。Sidecar 是一种涉及模式。

另外节点级日志代理会自动处理日志,无需进一步配置。还可以配置收集代理来根据“源容器”日志类型进行解析。

尽管 CPU 使用降低,但是会增加磁盘使用量。如果你的应用程序需要将日志写入文件,那尽量写入到标准输出中,而不是使用 Sidecar 容器处理。

# 带有日志代理的 Sidecar 容器:
如果节点级日志代理无法满足需求,可以运行在 Sidecar 容器中运行日志收集代理。该代理可以经过配置,适用于特定应用程序。但是该类型的 Sidecar 会消耗更多资源,并且不能使用 kubectl logs 查看日志。

直接暴露日志

最后一种方法是将日志直接写入后端存储,这是一种日志存储方案,但是与 Kubernetes 集群的关系并不大,这里不再讨论。

最后总结

在 Kubernetes Cluster 中,需要处理的日志分为以下几种:

 容器外日志:kubelet、Docker
 容器内日志:(已写标准输入、标准错误)容器应用程序,包括集群组件(比如 kube-porxy,etcd 等等)容器内日志:(未写标准输入、标准错误)容器应用应用,写入容器本地 

使用 DaemonSet 运行 POD 实例,在节点中收集日志。

以上是“Kubernetes 日志有关知识点有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2242字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)