1.Event概述
在日常開發中,查詢pod的啟動或者運行出現問題時,除了日志,Event也是一個關鍵排查問題手段。以下為官網對Event的定義Event 是集群中某個事件的報告。它一般表示系統的某些狀態變化。 Event 的保留時間有限,觸發器和消息可能會隨著時間的推移而演變。 事件消費者不應假定給定原因的事件的時間所反映的是一致的下層觸發因素,或具有該原因的事件的持續存在。 Events 應被視為通知性質的、盡最大努力而提供的補充數據。
2. Event字段定義
Kubernetes 事件對象包含多個字段,以下是一些關鍵字段及其含義:
Type?: 事件的類型,如 Normal、Warning 等。
Reason?: 事件的原因,簡短的描述,例如 Killing 表示 Pod 被終止。
Message: 事件的詳細描述,提供更多上下文信息。
FirstTimestamp?: 事件首次發生的時間。
LastTimestamp: 事件最后一次發生的時間。
Count: 事件的發生次數,特別是對于重復發生的事件。
3. 查詢事件的命令
以下介紹一些簡單的命令查詢命令
# 查詢某個命令空間下pod事件
kubectl get event -n ns-145 --field-selector involvedObject.kind=Pod
LAST SEEN   TYPE      REASON      OBJECT                      MESSAGE
2m4s        Warning   Unhealthy   pod/xxx-xuniren-b58d6e       Readiness probe failed: dial tcp 1xxxxxx: connect: connection refused
# 查詢更多的信息可以通過增加 -o wide, 可以查詢到事件的source,name以及更多信息
# 這個命令會實時顯示事件的變化,適合在需要實時監控事件時使用。
kubectl get events --watch
# 還可以通過查詢pod的詳細信息查看事件
kubectl describe pod -n namespace
4. 事件的持久化
事件在etcd中的有效時長為1h,如果需要增長有效事件,需要將事件保存在存儲中。一個常見的方法是將 Kubernetes 事件導出到持久化的日志系統中,例如 Elasticsearch、Fluentd。另外,還可以使用 Kubernetes 插件,例如kube-eventer和kubernetes-event-exporter。