乐趣区

关于kubernetes:如何从Kubernetes-Event中提取有效信息-IDCF

对于明天的基础设施工程团队来说,太多的监控和告警疲劳是一个真正的问题。当初有很多开源和第三方的工具提供了过滤乐音的能力。这听起来总是很好,而且很可能是真的。然而,如果我通知你,我最喜爱的替代品之一就在你背后,而且简直能够立刻从 Kubernetes 的 API 中取得呢?我说的是 Kubernetes 事件反馈。

Kubernetes 事件提供了对集群衰弱和性能的独特而清晰的见解。而在数据过多的时代,我发现 Kubernetes 事件提供了清晰的洞察力,而没有太多的乐音。

在这篇文章中,咱们将理解 Kubernetes 事件类型,帮忙你拜访和存储事件,并倡议一些大多数团队,无论大小,发现有帮忙的告警。

什么是 Kubernetes 事件?类型和示例

Kubernetes 事件是一个对象,它显示集群、节点、pod 或容器内产生的事件。这些对象通常是为了响应 K8s 零碎外部产生的变动而生成的。该 Kubernetes API 服务器使所有外围组件来创立这些事件。通常,每个事件还随同着一条日志音讯。然而,这两者十分不同,不会以任何其余形式相互影响。

对于 Kubernetes 事件须要留神的一件重要事件是,它们会在一段时间后被默认删除,通常在一个小时内。因而,您必须留神并收集产生的重要事件。

要拜访 Kubernetes 事件,您能够运行以下命令:

kubectl get event

后果如下所示:

如您所见,许多 Kubernetes 事件是由节点中的状态更改引起的。每个事件都有一个 Reason 字段。您能够应用此字段来确定 K8s 事件对象的类型。以下是一些基于事件起因的规范分类。

失败的事件

当 K8s 无奈创立一个容器或其余资源时,就会产生失败事件。这可能是因为谬误的镜像、输出谬误、没有预料到的起因以及许多不同的起因。简直能够必定的是,失败的事件将导致你的应用程序的性能被毁坏;因而监测这些类型的事件是十分重要的。

FailedToCreateContainerFailedToStartContainerFailedToPullImageFailedToKillPod等是一些失败事件的例子。

驱赶事件

驱赶事件常常产生,因为 K8s 常常染指并驱赶歹意容器和 pod(那些不必要地耗费大量资源的容器)。尽管这是预期的行为,但你依然须要留神这些事件的产生。大量的驱赶事件表明,你没有在零碎中设置适当的阈值。更多的时候,K8s 可能无奈辨认要驱赶的最佳实体,导致不相干的驱赶,从而导致服务流量损失。

节点特定事件

许多 K8s 事件都是基于节点及其生命周期流动。您可能曾经留神到 NodeHasSufficientMemoryNoteHasSufficientPIDNodeReady 和下面示例中的其余事件。这些事件传播了节点相干的状态变动,并在寻找零碎不稳固行为的本源时派上用场。

存储特定事件

所有基于云的应用程序都以一种或另一种形式利用存储。K8s 次要连贯 AWS、GCP 等内部服务,或者 Docker 外部资源进行存储。在某些状况下,Pod 可能无奈挂载存储资源。您应该留神 FailedMountFailedAttachVolume 事件以辨认谬误存储装置的状况。

调度事件

调度事件提供了对资源管理策略效率的洞察。如果您没有很好地治理您的资源,则可能没有任何残余的资源能够调配给新的 Pod。内存或 CPU 有余通常是罪魁祸首,在大多数状况下,您会收到 FailedScheduling 事件,并分明阐明为什么无奈进行调度。

获取 Kubernetes 事件

要拜访 Kubernetes 事件,您能够为 Pod 运行以下命令:

kubectl describe <podname>

或者,如果您想依据事件类型或任何其余字段查看更大的事件汇合,您能够运行以下命令:

kubectl get events –field-selector type!=Normal

尽管这些命令为您提供命令行上的最新事件,但它们对须要历史数据分析的大规模部署没有帮忙。您能够应用以下命令从 Kubernetes API 导出事件数据以进行详细分析:

kubectl get events -o json

这会将最新事件导出到 JSON 文件中,您能够将其导入到您最喜爱的可视化工具中以取得更多信息。

如何收集和存储事件

下面探讨的最初一种办法是从 Kubernetes 导出事件的最原始办法之一。您能够应用多种其余技术来平安地收集和存储事件。

本地观看和导出事件

Kubectl 提供了另一个不便的命令来察看零碎中产生的事件:

kubectl get events –watch

这将开始将事件流式传输到您的终端。同样,这对于剖析和可视化不是很有用。所以你应该思考将它与像 Banzai Cloud 这样的第三方日志收集器联合起来进行剖析。

KubeWatch

KubeWatch 是一个很棒的开源工具,用于观看 K8s 事件并将其流式传输到第三方工具和 webhook。您能够将其配置为在 Slack 通道中发送重要状态更改的音讯。您还能够应用它向 Prometheus 等剖析和告警工具发送事件。

您能够通过您最喜爱的 Kubernetes 工具(如 kubectl 或 helm)装置 KubeWatch。以下是 KubeWatch 的 Slack 告诉快照信息:

KubeWatch 提供了一个简略的设置过程,但不提供独立的存储或治理性能。此外,您不会取得任何指标或日志记录性能。

Events Exporter

该 Kubernetes Events Exporter 是在 K8S 本地观看的一个很好的代替。它容许您继续监控 K8s 事件并在须要时列出它们。它还从收集的数据中提取了大量指标,如事件计数、惟一事件计数等,并为您提供根本的监控设置。它十分易于装置,并且能够成为在应用更全面的工具安顿下来之前尝试的绝佳代替计划。

EventRouter

EventRouter 是另一个收集 Kubernetes 事件的平凡开源工具。它的设置毫不费力,旨在将 Kubernetes 事件流向多个源或汇,正如其文档中所说的那样。然而,就像 KubeWatch 一样,它也不提供查问或持久性性能。你须要将它与第三方存储和剖析工具连接起来,以取得全面的体验。

一旦你理解了你的监控指标并制订了策略,你能够思考转移到一个专门的、付费的 K8s 事件监控服务。你会失去弱小的查问性能和跨平台的警报。

对常见的正告事件收回告警

实时察看 K8s 事件对理解零碎中产生的状况至关重要。然而,你也须要建设一个弱小的警报策略,在出现异常或紧急情况时告诉你。

作为一个教训法令,你应该亲密关注失败和调度事件,因为漠视这些事件会毁坏你的应用程序的性能。你能够将被驱赶的事件设置为低优先级,因为它们通常是因为 K8s 的惯例清理而产生的。节点特定的事件和存储特定的事件必须告警(尽管 NodeReady 是一个很好的事件,但你不须要每次都为它收回警报)。

大多数工具容许通过 webhooks 或 Slack 等罕用合作平台发送告警。尽管这很简略,也很容易设置,但你能够通过把你的监控工具连贯到一个更高级的告警平台上,使它更进一步。Prometheus 的 AlertManager 也是一个不错的抉择。你也能够思考应用基于 SaaS 的解决方案,比方 ContainIQ,它有专门的接口来创立告警事件,在宽泛的平台上发送,并可能将事件与其余指标分割起来。

最初的想法

Kubernetes 事件是监控 K8s 集群运行状况和流动的好办法。然而,当与实用的策略和宽泛的工具集相结合时,它们会变得更加弱小。本指南帮忙您理解 Kubernetes 事件的重要性以及如何从中获取最大价值。

原文:https://www.cncf.io/blog/2021…

起源:云原生技术爱好者社区

作者:Matherson
申明:文章取得作者受权在 IDCF 社区公众号(devopshub)转发。优质内容共享给思否平台的技术伙伴,如原作者有其余思考请分割小编删除,致谢。

玩乐高,学麻利,规模化麻利联合作战沙盘之「乌托邦打算」,2022 年 3 月 5 - 6 日登陆深圳,将“多团队麻利协同”基因内化在研发流程中,为规模化晋升研发效力保驾护航!!🏰⛴公众号回复“乌托邦”可加入

退出移动版