kubernetes 中的事件(event)简介以及如何收集event和基于event告警

引用另外一篇文章对k8s event的介绍

1.什么是kubernetes事件

Kubernetes Events 是一种 Kubernetes 资源对象,记录了某个组件在某个时间做了某个动作,用于展示集群内发生的情况,当 Kubernetes 集群中资源状态发生变化时,可以产生新的 event 。

Kubernetes 系统中的各个组件会将运行时发生的各种事件(例如调度器做了什么决定,某些 Pod 为什么被从节点中驱逐)上报给 Kubernetes API Server 。Kubernetes API Server 将 event 存储在 Etcd 中,为避免 Etcd 的磁盘空间被填满,默认的保留策略是:在最后一次的事件发生后,删除 1 小时之前发生的事件。

可以通过kubectl describe $ResourceNamekubectl get event 命令查看相关资源的事件信息或查看 Kubernetes 集群中发生了哪些事件,默认情况下只会显示最近 1 小时内发生的事件。

2.为什么监控Kubernetes事件

事件监控可以弥补Kubernetes资源监控在实时性、准确性和场景上的欠缺。通过收集、监控事件,实时监控集群的异常与问题。

Kubernetes平台中可能产生大量事件, kubernetes组件不提供事件相关的指标,而且会自动清理事件(1小时),但有些事件的出现可能预示着对集群或节点可用性产生影响,因此需要对事件进行收集和监控。

3.如何采集Kubernetes事件

Kubernetes中的事件最终还是存储在etcd中,默认情况下只保存1个小时,由于etcd并不支持一些复杂的分析操作,默认Kubernetes只提供了非常简单的过滤方式,比如通过Reason、时间、类型等。同时这些事件只是被动的存在etcd中,并不支持主动推送到其他系统,通常只能手动的去查看。

而实际上我们对事件的使用需求非常高,例如:

对系统中的异常事件做实时告警,例如Failed、Evicted、FailedMount、FailedScheduling等。

通常问题排查可能要去查找历史数据,因此需要去查询更长时间范围的事件(几天甚至几个月)。

事件支持归类统计,例如能够计算事件发生的趋势以及与上一时间段(昨天/上周/发布前)对比,以便基于统计指标进行判断和决策。

支持不同的人员按照各种维度去做过滤、筛选。

支持自定义的订阅这些事件去做自定义的监控,以便和公司内部的部署运维平台集成。

为了让大家更便捷的使用Kubernetes事件功能,所以需要进行Kubernetes Event采集。

收集 Kubernetes 事件的解决方案

有多种解决方案可用于检索 Kubernetes 事件。让我们看看现成可用的项目。

复制代码
**重点推荐前两种方案**
  1. kubernetes-event-exporter (https://github.com/resmoio/kubernetes-event-exporter)

    事件导出器允许将经常错过的 Kubernetes 事件导出到各种输出,以便它们可用于可观察性或警报目的。

    事件导出器实现起来很简单,但功能非常强大。一旦事件被记录,它利用 Prometheus 客户端以 Prometheus 格式计数和报告事件。

  2. Kspan (https://github.com/weaveworks-experiments/kspan)

    Kspan 是 Weaveworks 创建的一个项目,它将 Kubernetes 事件转换为 OpenTelemetry Spans,通过因果关系将它们连接起来,并将它们组合成 traces。

    Kspan 将与 Kubernetes API 交互以收集各种事件并将生成的跟踪转发到 OpenTelemetry 收集器。

  3. Eventrouter

    正如 Eventrouter 项目的 GitHub 页面所述:"事件路由器充当 Kubernetes 系统中事件资源的活动观察者,它接收这些事件并将它们推送到用户指定的接收器。这对于许多不同的目的很有用,但最值得注意的是对在 Kubernetes 集群上运行的工作负载的长期行为分析。"

  4. Kubewatch

    Kubewatch 是一个 K8s 事件监视工具,用于跟踪 Kubewatch 中的每个资源更改。它支持通知,它将能够在 Slack、Hipchat、Webhook、Flock、SMTP 等中发布通知。

  5. Sloop

    Sloop 监控 Kubernetes,记录事件和资源状态变化的历史,并提供可视化来帮助调试过去的事件。

相关推荐
victory04312 小时前
K8S containerd 打包镜像和部署流程和注意事项
云原生·容器·kubernetes
醇氧2 小时前
Mac 安装 Docker Desktop
macos·docker·容器
馨谙4 小时前
使用 systemd 用户服务管理容器:从概念到实践
linux·容器
人工智能训练4 小时前
Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
linux·运维·前端·人工智能·windows·docker·容器
无名小卒Rain5 小时前
docker pull tomcat 报错missing signature key解决办法
运维·docker·容器
java_logo6 小时前
LOBE-CHAT Docker 容器化部署指南
运维·docker·语言模型·容器·llama
Serverless 社区6 小时前
【本不该故障系列】从 runC 到 runD:SAE 如何化解安全泄露风险
安全·云原生·serverless
U***e637 小时前
Docker增强现实开发
docker·容器·ar
Yuriey9 小时前
K8s部署实践-基于Debian13(Trixie)
云原生·容器·kubernetes