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,记录事件和资源状态变化的历史,并提供可视化来帮助调试过去的事件。

相关推荐
阿伟*rui1 小时前
docker入门
运维·docker·容器
运维小文2 小时前
K8S资源限制之resources
云原生·k8s·资源限制·resources
it噩梦2 小时前
k8s 中传递参数给docker容器
docker·容器·kubernetes
weixin_438197382 小时前
k8s服务内容滚动升级以及常用命令介绍
linux·运维·docker·云原生·容器·kubernetes
.生产的驴4 小时前
Docker 部署Nacos 单机部署 MYSQL数据持久化
android·运维·spring boot·sql·mysql·docker·容器
dreams_dream4 小时前
Ubuntu22.04.2 k8s部署
云原生·容器·kubernetes
大新新大浩浩4 小时前
使用docker-compose单点搭建社区版seafile+onlyoffice在线word编辑平台
docker·容器·word
葡萄皮Apple4 小时前
[CKS] 使用ingress公开https服务
云原生·容器·kubernetes
优质&青年6 小时前
【云原生系列--Longhorn的部署】
云原生
Linux运维技术栈8 小时前
信创化浪潮下的ARM镜像构建指南
arm开发·云原生·kubernetes