艾瑞網(wǎng)的網(wǎng)站架構(gòu)公司如何做網(wǎng)絡(luò)推廣營(yíng)銷
引用另外一篇文章對(duì)k8s event的介紹
1.什么是kubernetes事件
Kubernetes Events 是一種 Kubernetes 資源對(duì)象,記錄了某個(gè)組件在某個(gè)時(shí)間做了某個(gè)動(dòng)作,用于展示集群內(nèi)發(fā)生的情況,當(dāng) Kubernetes 集群中資源狀態(tài)發(fā)生變化時(shí),可以產(chǎn)生新的 event 。
Kubernetes 系統(tǒng)中的各個(gè)組件會(huì)將運(yùn)行時(shí)發(fā)生的各種事件(例如調(diào)度器做了什么決定,某些 Pod 為什么被從節(jié)點(diǎn)中驅(qū)逐)上報(bào)給 Kubernetes API Server 。Kubernetes API Server 將 event 存儲(chǔ)在 Etcd 中,為避免 Etcd 的磁盤(pán)空間被填滿,默認(rèn)的保留策略是:在最后一次的事件發(fā)生后,刪除 1 小時(shí)之前發(fā)生的事件。
可以通過(guò)kubectl describe $ResourceName
或 kubectl get event
命令查看相關(guān)資源的事件信息或查看 Kubernetes 集群中發(fā)生了哪些事件,默認(rèn)情況下只會(huì)顯示最近 1 小時(shí)內(nèi)發(fā)生的事件。
2.為什么監(jiān)控Kubernetes事件
事件監(jiān)控可以彌補(bǔ)Kubernetes資源監(jiān)控在實(shí)時(shí)性、準(zhǔn)確性和場(chǎng)景上的欠缺。通過(guò)收集、監(jiān)控事件,實(shí)時(shí)監(jiān)控集群的異常與問(wèn)題。
Kubernetes平臺(tái)中可能產(chǎn)生大量事件, kubernetes組件不提供事件相關(guān)的指標(biāo),而且會(huì)自動(dòng)清理事件(1小時(shí)),但有些事件的出現(xiàn)可能預(yù)示著對(duì)集群或節(jié)點(diǎn)可用性產(chǎn)生影響,因此需要對(duì)事件進(jìn)行收集和監(jiān)控。
3.如何采集Kubernetes事件
Kubernetes中的事件最終還是存儲(chǔ)在etcd中,默認(rèn)情況下只保存1個(gè)小時(shí),由于etcd并不支持一些復(fù)雜的分析操作,默認(rèn)Kubernetes只提供了非常簡(jiǎn)單的過(guò)濾方式,比如通過(guò)Reason、時(shí)間、類型等。同時(shí)這些事件只是被動(dòng)的存在etcd中,并不支持主動(dòng)推送到其他系統(tǒng),通常只能手動(dòng)的去查看。
而實(shí)際上我們對(duì)事件的使用需求非常高,例如:
對(duì)系統(tǒng)中的異常事件做實(shí)時(shí)告警,例如Failed、Evicted、FailedMount、FailedScheduling等。
通常問(wèn)題排查可能要去查找歷史數(shù)據(jù),因此需要去查詢更長(zhǎng)時(shí)間范圍的事件(幾天甚至幾個(gè)月)。
事件支持歸類統(tǒng)計(jì),例如能夠計(jì)算事件發(fā)生的趨勢(shì)以及與上一時(shí)間段(昨天/上周/發(fā)布前)對(duì)比,以便基于統(tǒng)計(jì)指標(biāo)進(jìn)行判斷和決策。
支持不同的人員按照各種維度去做過(guò)濾、篩選。
支持自定義的訂閱這些事件去做自定義的監(jiān)控,以便和公司內(nèi)部的部署運(yùn)維平臺(tái)集成。
為了讓大家更便捷的使用Kubernetes事件功能,所以需要進(jìn)行Kubernetes Event采集。
收集 Kubernetes 事件的解決方案
有多種解決方案可用于檢索 Kubernetes 事件。讓我們看看現(xiàn)成可用的項(xiàng)目。
**重點(diǎn)推薦前兩種方案**
-
kubernetes-event-exporter (https://github.com/resmoio/kubernetes-event-exporter)
事件導(dǎo)出器允許將經(jīng)常錯(cuò)過(guò)的 Kubernetes 事件導(dǎo)出到各種輸出,以便它們可用于可觀察性或警報(bào)目的。事件導(dǎo)出器實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但功能非常強(qiáng)大。一旦事件被記錄,它利用 Prometheus 客戶端以 Prometheus 格式計(jì)數(shù)和報(bào)告事件。
-
Kspan (https://github.com/weaveworks-experiments/kspan)
Kspan 是 Weaveworks 創(chuàng)建的一個(gè)項(xiàng)目,它將 Kubernetes 事件轉(zhuǎn)換為 OpenTelemetry Spans,通過(guò)因果關(guān)系將它們連接起來(lái),并將它們組合成 traces。Kspan 將與 Kubernetes API 交互以收集各種事件并將生成的跟蹤轉(zhuǎn)發(fā)到 OpenTelemetry 收集器。
-
Eventrouter
正如 Eventrouter 項(xiàng)目的 GitHub 頁(yè)面所述:“事件路由器充當(dāng) Kubernetes 系統(tǒng)中事件資源的活動(dòng)觀察者,它接收這些事件并將它們推送到用戶指定的接收器。這對(duì)于許多不同的目的很有用,但最值得注意的是對(duì)在 Kubernetes 集群上運(yùn)行的工作負(fù)載的長(zhǎng)期行為分析?!?/p> -
Kubewatch
Kubewatch 是一個(gè) K8s 事件監(jiān)視工具,用于跟蹤 Kubewatch 中的每個(gè)資源更改。它支持通知,它將能夠在 Slack、Hipchat、Webhook、Flock、SMTP 等中發(fā)布通知。 -
Sloop
Sloop 監(jiān)控 Kubernetes,記錄事件和資源狀態(tài)變化的歷史,并提供可視化來(lái)幫助調(diào)試過(guò)去的事件。