如何使用 K8s 兩大利器"審計"和"事件"幫你擺脫運維困境?

2020-12-26 計算機java編程

概述

下面幾個問題,相信廣大 K8s 用戶在日常集群運維中都曾經遇到過:

集群中的某個應用被刪除了,誰幹的?Apiserver 的負載突然變高,大量訪問失敗,集群中到底發生了什麼?集群節點 NotReady,是什麼原因導致的?集群的節點發生了自動擴容,是什麼觸發的?什麼時間觸發的?以前,排查這些問題,對客戶來說並不容易。生產環境中的 Kubernetes 集群通常是一個相當複雜的系統,底層是各種異構的主機、網絡、存儲等雲基礎設施,上層承載著大量的應用負載,中間運行著各種原生(例如:Scheduler、Kubelet)和第三方(例如:各種 Operator)的組件,負責對基礎設施和應用進行管理和調度; 此外不同角色的人員頻繁地在集群上進行部署應用、添加節點等各種操作。在集群運行的過程中,為了對集群中發生的狀況能夠儘可能的了如指掌,我們通常會從多個維度對集群進行觀測。

日誌,作為實現軟體可觀測性的三大支柱之一,為了解系統運行狀況,排查系統故障提供了關鍵的線索,在運維管理中起著至關重要的作用。Kubernetes 提供了兩種原生的日誌形式——審計(Audit)和事件(Event),它們分別記錄了對於集群資源的訪問以及集群中發生的事件信息。從騰訊雲容器團隊長期運維 K8s 集群的經驗來看,審計和事件並不是可有可無的東西,善用它們可以極大的提高集群的可觀測性,為運維帶來巨大的便利。下面讓我們先來簡單認識一下它們。

什麼是 Kubernetes 審計?

Kubernetes 審計日誌是 Kube-apiserver 產生的可配置策略的結構化日誌,記錄了對 Apiserver 的訪問事件。審計日誌提供 Metrics 之外的另一種集群觀測維度,通過查看、分析審計日誌,可以追溯對集群狀態的變更;了解集群的運行狀況;排查異常;發現集群潛在的安全、性能風險等等。

審計來源

在 Kubernetes 中,所有對集群狀態的查詢和修改都是通過向 Apiserver 發送請求,對 Apiserver 的請求來源可以分為4類

控制面組件,例如 Scheduler,各種 Controller,Apiserver 自身節點上的各種 Agent,例如 Kubelet、Kube-proxy 等集群的其它服務,例如 Coredns、Ingress-controller、各種第三方的 Operator 等外部用戶,例如運維人員通過 Kubectl

審計中都記錄了些什麼?

每一條審計日誌都是一個 JSON 格式的結構化記錄,包括元數據(metadata)、請求內容(requestObject)和響應內容(responseObject)3個部分。其中元數據一定會存在,請求和響應內容是否存在取決於審計級別。元數據包含了請求的上下文信息,例如誰發起的請求,從哪裡發起的,訪問的 URI 等等;

審計有什麼用?

Apiserver 做為 Kubernetes 集群唯一的資源查詢、變更入口,審計日誌可以說記錄了所有對於集群訪問的流水, 通過它可以從宏觀和微觀了解整個集群的運行狀況,比如:

資源被刪掉了,什麼時候刪掉的,被「誰」刪掉的?服務出現問題,什麼時候做過版本變更?Apiserver 的響應延時變長,或者出現大量 5XX 響應 Status Code,Apiserver 負載變高,是什麼導致的?Apiserver 返回 401/403 請求,究竟是證書過期,非法訪問,還是 RBAC 配置錯誤等。Apiserver 收到大量來自外網 IP 對敏感資源的訪問請求,這種請求是否合理,是否存在安全風險;什麼是Kubernetes事件?

事件(Event)是 Kubernetes 中眾多資源對象中的一員,通常用來記錄集群內發生的狀態變更,大到集群節點異常,小到 Pod 啟動、調度成功等等。我們常用的kubectl describe命令就可以查看相關資源的事件信息。

事件中記錄了什麼?

級別(Type): 目前僅有「Normal」和「Warning」,但是如果需要,可以使用自定義類型。資源類型/對象(Involved Object):事件所涉及的對象,例如 Pod,Deployment,Node 等。事件源(Source):報告此事件的組件;如 Scheduler、Kubelet 等。內容(Reason):當前發生事件的簡短描述,一般為枚舉值,主要在程序內部使用。詳細描述(Message):當前發生事件的詳細描述信息。出現次數(Count):事件發生的次數。事件有什麼用?

集群內已經翻江倒海,集群外卻風平浪靜,這可能是我們日常集群運維中常常遇到的情況,集群內的狀況如果無法透過事件來感知,很可能會錯過最佳的問題處理時間,待問題擴大,影響到業務時才發現往往已經為時已晚;除了早早發現問題,Event 也是排查問題的最佳幫手,由於 Event 記錄了全面的集群狀態變更信息,所以大部分的集群問題都可通過 Event 來排查。總結一下 Event 在集群中扮演兩大重要角色:

「吹哨人」:當集群發生異常情況時,用戶可通過事件第一時間感知;「目擊者」:集群中的大小事件都會通過 Event 記錄,如果集群中發生意外情況,如:節點狀態異常,Pod 重啟,都可以通過事件查找發生的時間點及原因;TKE 如何發掘審計/事件的價值

傳統的通過輸入查詢語句檢索日誌的方式來使用審計和事件,固然可以提供很高的靈活性,但也有著較高的使用門檻,不僅要求使用者對於日誌的數據結構非常了解,還要熟悉 Lucene、SQL 語法。這往往導致使用效率偏低,也無法充分發掘數據的價值。

騰訊雲容器服務 TKE 聯合騰訊雲日誌服務CLS,打造出針對 Kubernetes 審計/事件採集、存儲、檢索、分析的一站式產品級服務, 不僅提供了一鍵開啟/關閉功能,免去一切繁瑣的配置;而且容器團隊還從長期運維海量集群的經驗中,總結出對於 Kubernetes 審計/事件的最佳使用實踐,通過可視化的圖表,以多個維度對審計日誌和集群事件進行呈現,使用者只需了解 K8s 的基本概念,就能很「直覺」地在 TKE 控制臺上進行各種檢索和分析操作,足以涵蓋絕大多數常見集群運維場景, 讓無論是發現問題還是定位問題都事半功倍,提升運維效率,真正將審計和事件數據的價值最大化 。

如何使用 TKE 審計/事件服務去排查問題?

關於 TKE 的集群審計/事件簡介與基礎操作,請參考集群審計、事件存儲的官方文檔。

場景示例:

下面我們看幾個現實中的典型場景

示例1: 排查一個工作負載消失的問題

在審計檢索頁面中,單擊【K8s 對象操作概覽】標籤,指定操作類型和資源對象

查詢結果如下圖所示:

由圖可見,是 10001****7138 這個帳+號,對應用「nginx」進行了刪除。可根據帳號ID在【訪問管理】>【用戶列表】中找到關於此帳號的詳細信息。

示例2: 排查一個節點被封鎖的問題

在審計檢索頁面中,單擊【節點操作概覽】標籤,填寫被封鎖的節點名

查詢結果如下圖所示:

由圖可見,是10001****7138這個帳+號在2020-1-30T06:22:18時對172.16.18.13這臺節點進行了封鎖操作。

示例3: 排查 Apiserver 響應變慢的問題

在審計檢索的【聚合檢索】標籤頁中,提供了從用戶、操作類型、返回狀態碼等多個維度對於 Apiserver 訪問聚合趨勢圖。

由圖可見,用戶tke-kube-state-metrics的訪問量遠高於其他用戶,並且在「操作類型分布趨勢」圖中可以看出大多數都是 list 操作,在「狀態碼分布趨勢」圖中可以看出,狀態

碼大多數為 403,結合業務日誌可知,由於 RBAC 鑑權問題導致tke-kube-state-metrics組件不停的請求Apiserver重試,導致 Apiserver 訪問劇增。日誌如下所示:

示例4:排查節點異常的問題

一臺 Node 節點出現異常,在事件檢索頁面,點擊【事件總覽】,在過濾項中輸入異常節點名稱

查詢結果顯示,有一條節點磁碟空間不足的事件記錄查詢結果如下圖:

進一步查看異常事件趨勢

可以發現,2020-11-25號開始,節點172|16|18|13由於磁碟空間不足導致節點異常,此後 kubelet 開始嘗試驅逐節點上的 pod 以回收節點磁碟空間;

示例5: 查找觸發節點擴容的原因

開啟了節點池「彈性伸縮」的集群,CA(cluster-autoscler)組件會根據負載狀況自動對集群中節點數量進行增減。如果集群中的節點發生了自動擴(縮)容,用戶可通過事件檢索對整個擴(縮)容過程進行回溯。

在事件檢索頁面,點擊【全局檢索】,輸入以下檢索命令:

event.source.component : "cluster-autoscaler"

在左側隱藏欄位中選擇event.reason、event.message、event.involvedObject.name、event.involvedObject.name進行顯示,將查詢結果按照日誌時間倒序排列,結果如下圖所示:

通過上圖的事件流水,可以看到節點擴容操作在2020-11-25 20:35:45左右,分別由三個 nginx Pod(nginx-5dbf784b68-tq8rd、nginx-5dbf784b68-fpvbx、nginx-5dbf784b68-v9jv5) 觸發,最終擴增了3個節點,後續的擴容由於達到節點池的最大節點數沒有再次觸發。

相關焦點

  • 天融信堡壘機 運維管理利器
    IT業務系統日益龐大,如何簡化運維管理難題及運維安全性問題? IT運維人員如何應對諸多系統用戶名和密碼的記憶以及口令複雜度要求?IT部門的管理與運維困擾逐漸凸顯。 現狀管理問題 網絡設備、主機系統等,分別具備獨立的用戶管理、認證授權和系統審計,且由不同的系統管理員負責維護和管理,工作量及複雜程度成倍激增。
  • 雙語閱讀|Jim’s Puppy,最好的伴侶總會讓你擺脫困境
    Jim’s father gave Jim a puppy on his tenth birthday. Jim named the puppy as Brownie. Soon , Jim and Brownie became fond of each other.
  • 白巖松:如何擺脫稚嫩心態和不敢表達的困境
    白巖松:如何擺脫稚嫩 心態和不敢表達的困境其中之一是:如何打破緊張膽小、不敢表達的困境?如何擺脫「總覺得自己還是小孩子」的稚嫩思維和心態?對這些問題,央視評論員白巖松分享了他的看法。 白巖松認為:大多數人的不善表達,都是突破不了內心障礙。與其說是膽小,不如說是太在意別人對自己表達的反應,因此擔心憂慮害怕,所以就不表達了。
  • 海量大數據平臺的運維智能化實踐
    本文摘要:  介紹Tesla如何支撐阿里離線計算和實時計算兩大海量大數據平臺的標準化日常運維運營,以及探索如何構築運維領域的知識圖譜,打造針對大數據平臺和大數據業務的數據化全息投影,實現多維的立體化監控、智能決策分析、自動化執行的運維閉環。
  • 一個人陷入困境時,只有把這3件事給做好,才能早日擺脫困境
    一個人陷入困境時,只有把以下這3件事給做好,才能早日擺脫困境,逐漸走向人生巔峰。一、在困境中不屈不撓其實挫折和困境並不可怕,當一個人陷入困境的時候,這時是磨練自己最好的時機,困境中可以磨難自己的意志,讓自己的意志能變得更強大。
  • 如何擺脫困境?《易經》給出了三個步驟,助你從失落中走出來
    同樣,當我們陷入困境時,也正是因為有些事情我們想不出來也做不到,所以我們才陷入困境。但實際上,很多人並不理解這種關係。他們認為這是自己命不好,所以就順其自然,無法擺脫困境。事實上,生活中所有的困難都是我們自己設定的。
  • 運維監控系統 - 選型篇
    監控系統號稱運維的眼睛,是運維自動化保障體系最重要的平臺,沒有之一,業界也有很多開源產品可以用,本篇就來聊一下如何選型。CACTICACTI最常見的使用場景是監控網絡設備,網工常用利器,核心原理就是通過SNMP協議去採集交換機數據,機器或者業務一般不用CACTI。
  • 【IDCC2020】廣東浩雲長盛網絡股份有限公司全國運維總經理朱紅兵...
    第二個容易缺的尾巴,因為我們數據中心正常的生命周期大概是8到10年,但是我設備的生命周期沒有這麼長,像蓄電池正常的生命周期就是6年左右,包括冷卻塔、精密空調、風櫃,它的周期5到8年的時候需要大修,需要優化、改造,這部分的運維體系很多第三方同行是容易缺的。第二個容易缺的地方是很多同行做這個事情的時候,它的運維體系有,但是很多年沒有迭代。
  • 後疫情時代,AIOps釋放企業運維新活力
    而在企業運維向「AI智能運維」演進的道路上,AIOps是非常重要的賦能利器。當記者問及曹榮海為何AIOps理念誕生已久,但在2020年才逐漸呈現出「爆款」潛質時,曹榮海表示如今企業數據中心的系統物理架構和軟體架構既龐大又複雜,AI數據算法承擔的是運維大腦的角色,而大數據處理平臺就是運維的雙手。
  • 軍用重卡深陷沙海無法前進,看汽車兵如何擺脫困境?
    軍用重卡深陷沙海無法前進,看汽車兵如何擺脫困境?本周,兩支戰隊又將上演怎樣的精彩表現?「加油,走起來,不要停!」「所有人都要使勁!」本期節目沙海救援課目,要求兩支戰隊分別攜帶就便器材,快速到達受困車輛位置並展開救援,首先將被困車輛救援出受困區域的戰隊獲勝。
  • 學姐的這些方法,幫你擺脫英語困境!
    看這裡,學姐幫你,這裡的方法會幫你擺脫英語的困境。一·記憶系列1、 記特殊不記大眾英語是非常零碎的科目,一個一個去記憶的話,我們容易混淆,而且,過段時間就會忘記。緊接著,我還可以想到discover 和recover的名詞形式是相似的,分別為discovery和recovery ,聯想到uncover,我又可以想到相同構詞法的單詞undo解開,unload卸貨,untight解開,cover還可以做名詞封面,於是我又可以想到有關「書本」的單詞。
  • 同樣都是運維,有的人月薪5K,有人月薪60K,差距為啥這麼大?
    運維到底是一個什麼樣的職位?在有的PR眼裡,運維是神一樣的人物,小到斷網修復,大到伺服器崩潰數據恢復,就沒有運維救不了的急,平常還能幫著抗一下大桶水;這樣的運維均價在5K左右。不過,運維和運維之間還是有差距的,同樣是修網、救數據、抗大桶水,有的人卻能拿到月薪60K!
  • QooCam 8k全景相機,帶你玩轉地球嗨翻天!
    ——QooCam 8k 全景相機,視頻拍照一部QooCam全部幫你搞定!▼簡單開箱說到QooCam全景相機,酷愛運動的朋友一定不陌生。筆者今天給大家介紹的QooCam 8K全景相機其實的QooCam全景相機的二代產品。
  • 情緒化的時代,我們該如何擺脫溝通困境?
    「衝泡沫也要用洗碗巾擦洗,你總是這個樣子,讓你幫我幹點事就像要了你命一樣!」「你剛剛打斷我講話的時候,我感到很生氣。」我們在溝通過程中應當注意,一次只說一個問題,用「我」為開頭的陳述句表達你的觀點。不要將某一特定事件上升到對方的普遍行為。避免使用「總是」或者「從來」這樣的詞。
  • 這些補脾食物,可以幫你擺脫困境,不妨多吃
    這些症狀你是否也有?身體有問題對人時時刻刻產生影響,無法以飽滿的精神和強健的體魄去應對生活和工作中的種種事務,總是有心無力。如何脫離這種狀態是每個人最關心的事情,這幾種補脾食物就可以幫你擺脫困境,一定要多吃。
  • 什麼是資料庫審計?
    資料庫審計系統的主要價值有兩點,一是:在發生資料庫安全事件(例如數據篡改、洩露)後為事件的追責定責提供依據;二是,針對資料庫操作的風險行為進行時時告警。二、資料庫審計怎麼審?探針式數據採集,還可以進行資料庫本地行為審計,包括資料庫和應用系統同機審計和遠程登錄後的客戶端行為。實現原理如下:2、語法、語義解析SQL語法、語義的解析技術,是實現資料庫審計系統可用、易用的必要條件。準確的資料庫協議解析,能夠保障資料庫審計的全面性與易用性。
  • 日誌易助力臺灣國泰世華銀行網絡安全合規審計
    近日,臺灣國泰世華銀行上海分行與日誌易就安全合規審計項目展開合作,日誌易將助力國泰世華銀行實現基於海量日誌的實時監控、安全事件響應等需求,滿足國家網絡安全法規要求。二、日誌審計日誌易能夠實現對網絡設備、安全設備的日誌審計。包括網絡設備審計、防火牆日誌審計、IPS日誌審計等。
  • 雲運維的核心是什麼?
    隨著雲時代的發展,雲平臺被越來越多的企業認可和使用,越來越多的用戶開始在雲平臺上部署自己的應用,如何在雲平臺上進行運維也就被越來越多的企業所關注。傳統層面的運維,接觸的都是硬體,如伺服器、設備和風火水電,但是在雲時代,運維人員已經無法見到物理的任何設備,運維人員不再需要被束縛於物理硬體的穩定和可靠性,雲運維的核心變成了對應用的監控和管理。 如何在雲平臺上實現應用的快速部署,快速更新,實時監控?
  • 王健林是如何從負債8900億減至1800億擺脫困境的?林寧功不可沒
    在2017年,他的人生還正處於耀眼的時候,他名下所擁有的萬達企業,就擁有200多個萬達廣場和10座萬達城市。除此之外,他還擁有數千家電影院和幾個電影製片廠。2020年,對於很多人來說,都是非常「不友好」的一年。大家應該都知道,受到今年一個「特殊事件」的影響,一次次地刷新著人們的「認知」,不光是普通人受到了很大的影響,即使是成功人士也會經歷許多變故。
  • 什麼是審計?物流費用專項審計如何開展?
    如:存貨清查審計、固定資產構建及處置審計、資金收支審計。2、以帳務為對象。對因提供、銷售商品或勞務產生的債權債務的產生依據,期間過程和時點狀態進行審計。如:帳期審計,回款期審計,壞帳審批審計。3、以規則為對象。對制度、計劃、任務、標準、流程等的執行過程及結果進行審計。