k8s event事件的重要性(重要)


對於當今的工程團隊來說,太多的監視和警報疲勞是一個真正的問題。現在有很多開源和第三方工具可以解決這些問題。這聽起來總是像是真的,而且很可能是真的。但是,如果我告訴你,我最喜歡的一個替代方案就在你面前,並且幾乎可以立即從 Kubernetes API 訪問,你會怎么做呢?我說的是 Kubernetes 事件

 

Kubernetes 事件為集群運行狀況和性能提供了獨特而清晰的見解。在數據太多的日子里,我發現 Kubernetes 事件在沒有太多干擾的情況下提供了清晰的見解。

在本文中,我們將了解 Kubernetes 事件類型,幫助你訪問和存儲事件,並建議一些大多數團隊(無論大小)都會覺得有用的提醒。

什么是 Kubernetes 事件?類型和例子

Kubernetes 事件是一個對象,它顯示了集群、節點、pod 或容器中正在發生的事情。這些對象通常是根據 K8s 系統中發生的更改而生成的。Kubernetes API Server 允許所有核心組件創建這些事件。通常,每個事件都伴隨着一條日志消息。然而,這兩者是非常不同的,不會以任何其他方式影響彼此。

關於 Kubernetes 事件需要注意的一件重要的事情是,它們在默認情況下會在一段時間后被刪除,通常在一個小時以內。因此,你必須在重要事件發生時觀察並收集它們。

訪問 Kubernetes 事件可以使用如下命令:

kubectl get event

結果是這樣的:

圖片

新啟動節點的事件

正如你所看到的,許多 Kubernetes 事件都是由節點狀態的改變引起的。每個事件都有一個 Reason 字段。你可以使用這個字段來確定 K8s 事件對象的類型。以下是一些基於事件原因的標准分類。

失敗事件

當 K8s 創建容器或其他資源失敗時,將生成失敗事件。這可能是由於錯誤的鏡像、輸入錯誤、不充分的原因,以及許多不同的原因。幾乎可以肯定的是,失敗事件會導致應用的功能失效;因此,監視這些類型的事件是必要的。

FailedToCreateContainer、FailedToStartContainer、FailedToPullImage、FailedToKillPod 等都是失敗事件的例子。

驅逐事件

驅逐事件經常發生,因為 K8s 經常會介入並驅逐流氓容器和 pod(那些不必要地消耗大量資源的容器和 pod)。雖然這是預期的行為,但你仍然需要注意這些事件的發生。大量的驅逐表明你沒有在系統中設置適當的閾值。通常情況下,K8s 可能無法確定要驅逐的最佳實體,從而導致不相關的驅逐,從而損失正常運行時間。

與節點相關的事件

許多 K8s 事件都基於節點及其生命周期活動。你可能已經注意到上面示例中的 NodeHasSufficientMemory、NoteHasSufficientPID、NodeReady 和其他事件。這些信息傳遞與節點相關的狀態變化,在查找系統不穩定行為的來源時可以派上用場。

與存儲相關的事件

所有基於雲的應用都以這樣或那樣的方式利用存儲空間。K8s 主要通過 Docker 連接 AWS、GCP 等外部服務或內部資源進行存儲。在某些情況下,pod 可能無法掛載存儲資源。你應該查看 FailedMount 和 FailedAttachVolume 事件,以確定錯誤的存儲掛載情況。

調度事件

調度事件可以洞察資源管理策略的效率。如果你沒有很好地管理你的資源,可能沒有任何剩余來分配給新的 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 的[1])耦合起來進行分析。

KubeWatch

KubeWatch[2]是一個很棒的開源工具,可以觀看 K8s 的活動並將其流媒體到第三方工具和網絡鈎子上。你可以將其配置為在 Slack 通道中發送重要狀態更改的消息。你還可以使用它將事件發送到分析和提醒工具(如 Prometheus)。

你可以通過 kubectl 或 helm 等你最喜歡的 Kubernetes 工具來安裝 KubeWatch。下面是 KubeWatch 的 Slack 通知的簡圖:

圖片

KubeWatch Slack Notifications(來源:KubeWatch)

KubeWatch 提供了簡單的設置過程,但不提供獨立的存儲或管理功能。此外,你也沒有獲得任何度量或日志記錄功能。

Event Exporter

Kubernetes Event Exporter[3]是 K8s 中原生觀看方法的一個很好的替代方案。它允許你持續監視 K8s 事件,並在需要時列出它們。它還從收集的數據中提取了大量的指標,如事件計數、獨特事件計數等,並為你提供了基本的監視設置。它安裝起來非常容易,在使用一個更全面的工具之前,可以先試用它。

EventRouter

EventRouter[4]是另一個收集 Kubernetes 事件的開源工具。它可以輕松地設置和將 Kubernetes 事件流到多個目標。然而,就像 KubeWatch 一樣,它也不提供查詢或持久性特性。你需要將其與第三方存儲和分析工具連接起來,以獲得完整的體驗。

一旦了解了監視目標並制定了策略,就可以考慮轉向專用的付費 K8s 事件監視服務。你可以在各種平台上獲得強大的查詢功能和警報。

常見的警告事件

實時觀察 K8s 事件對於了解系統中發生的情況至關重要。但是,你還需要設置一個可靠的警報策略,以便在異常或緊急情況下通知你。

根據經驗,你應該密切關注失敗事件和調度事件,因為忽略這些事件會破壞應用的功能。你可以將被驅逐的事件設置為低優先級,因為它們通常是由 K8s 的例行清理生成的。特定於節點和特定於存儲的事件必須手動選擇以發出警報(雖然知道 NodeReady 是一個很好的事件,但你不需要每次都為它發出警報)。

大多數工具都允許通過網絡鈎子或 Slack 等通用協作平台發送警報。雖然這很簡單,設置起來也很容易,但是你可以更進一步,將監視工具連接到更高級的警報平台。Prometheus 中的AlertManager[5]也是一個不錯的選擇。你還可以考慮使用基於 SaaS 的解決方案,如ContainIQ[6],它具有專門的接口,用於創建警報條件、在廣泛的平台上發送警報條件,以及將事件與其他指標關聯起來的能力。

總結

Kubernetes 事件是監視 K8s 集群運行狀況和活動的好方法。然而,當它們與實用的策略和廣泛的工具集結合在一起時,會變得更加強大。本指南幫助你理解 Kubernetes 事件的重要性,以及如何從它們中汲取最大的價值。

參考資料

[1]

Banzai Cloud 的: https://github.com/banzaicloud/logging-operator

[2]

KubeWatch: https://github.com/bitnami-labs/kubewatch

[3]

Kubernetes Event Exporter: https://github.com/caicloud/event_exporter

[4]

EventRouter: https://github.com/heptiolabs/eventrouter

[5]

AlertManager: https://prometheus.io/docs/alerting/latest/alertmanager/

[6]

ContainIQ: https://www.containiq.com/kubernetes-monitoring

 

本文轉載自:「CNCF」,原文:https://tinyurl.com/y6a3dvya,版權歸原作者所有。歡迎投稿,投稿郵箱: editor@hi-linux.com。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM