引用另外一篇文章對k8s event的介紹
1.什么是kubernetes事件
Kubernetes Events 是一種 Kubernetes 資源對象,記錄了某個組件在某個時間做了某個動作,用于展示集群內發生的情況,當 Kubernetes 集群中資源狀態發生變化時,可以產生新的 event 。
Kubernetes 系統中的各個組件會將運行時發生的各種事件(例如調度器做了什么決定,某些 Pod 為什么被從節點中驅逐)上報給 Kubernetes API Server 。Kubernetes API Server 將 event 存儲在 Etcd 中,為避免 Etcd 的磁盤空間被填滿,默認的保留策略是:在最后一次的事件發生后,刪除 1 小時之前發生的事件。
可以通過kubectl describe $ResourceName
或 kubectl 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 事件。讓我們看看現成可用的項目。
**重點推薦前兩種方案**
-
kubernetes-event-exporter (https://github.com/resmoio/kubernetes-event-exporter)
事件導出器允許將經常錯過的 Kubernetes 事件導出到各種輸出,以便它們可用于可觀察性或警報目的。事件導出器實現起來很簡單,但功能非常強大。一旦事件被記錄,它利用 Prometheus 客戶端以 Prometheus 格式計數和報告事件。
-
Kspan (https://github.com/weaveworks-experiments/kspan)
Kspan 是 Weaveworks 創建的一個項目,它將 Kubernetes 事件轉換為 OpenTelemetry Spans,通過因果關系將它們連接起來,并將它們組合成 traces。Kspan 將與 Kubernetes API 交互以收集各種事件并將生成的跟蹤轉發到 OpenTelemetry 收集器。
-
Eventrouter
正如 Eventrouter 項目的 GitHub 頁面所述:“事件路由器充當 Kubernetes 系統中事件資源的活動觀察者,它接收這些事件并將它們推送到用戶指定的接收器。這對于許多不同的目的很有用,但最值得注意的是對在 Kubernetes 集群上運行的工作負載的長期行為分析。” -
Kubewatch
Kubewatch 是一個 K8s 事件監視工具,用于跟蹤 Kubewatch 中的每個資源更改。它支持通知,它將能夠在 Slack、Hipchat、Webhook、Flock、SMTP 等中發布通知。 -
Sloop
Sloop 監控 Kubernetes,記錄事件和資源狀態變化的歷史,并提供可視化來幫助調試過去的事件。