細說k8s監(jiān)控架構(gòu)

Kubernetes社區(qū)之活躍祖能,不斷地迭代演化更新一些技術(shù)方案晾剖,容器監(jiān)控亦是如此据沈。本文結(jié)合官方給出的監(jiān)控架構(gòu)及自己的一些實踐經(jīng)驗莺奔,細說容器監(jiān)控崖叫。在之前的文章(Kubernetes系列(六) 監(jiān)控及prometheus實踐)中有關(guān)于Kubernetes容器監(jiān)控方案的詳細介紹遗淳,如果感興趣歡迎閱讀

官方監(jiān)控架構(gòu)

上圖是Kubernetes官方給出的監(jiān)控架構(gòu),劃分為核心指標管道(黑色)和監(jiān)控管道(藍色)

核心監(jiān)控管道 由kubelet心傀、資源評估器屈暗、metrics-server(精簡Heapster)和API server的master metrics API組成。這些監(jiān)控項被核心系統(tǒng)組件使用脂男,例如調(diào)度邏輯(調(diào)度器和基于HPA的系統(tǒng)指標)和kubectl top养叛。此管道不適用于第三方監(jiān)控系統(tǒng)集成

根據(jù)核心監(jiān)控指標的用途,拆解監(jiān)控數(shù)據(jù)鏈路
(1).kubelet(cAdvisor)[ -> 資源評估器 ] -> metrics-server -> API server -> scheduler
(2).kubelet(cAdvisor)[ -> 資源評估器 ] -> metrics-server -> API server -> HPA controller
(3).kubelet(cAdvisor)[ -> 資源評估器 ] -> metrics-server -> API server -> kubectl top
(4).kubelet(cAdvisor)[ -> 資源評估器 ] -> metrics-server -> API server -> OOS Infrastore

監(jiān)控管道 從系統(tǒng)收集大量監(jiān)控指標并且將它們導出到用戶端宰翅、HPA(自定義監(jiān)控項)以及通過適配器導出到Infrastore弃甥。這樣的管道通常由每個節(jié)點的代理和一個集群級聚合器組成
鏈路拆解
(5).kubelet(cAdvisor)[ -> node-exporter ] -> prometheus -> HPA API adapter -> HPA controller
(6).kubelet(cAdvisor)[ -> node-exporter ] -> prometheus -> API adapter -> OSS Infrastore

基本鏈路 kubelet運行于集群中的所有worker node淆攻,集成于kubelet中的cAdvisor模塊負責采集運行于當前節(jié)點上所有Pod、Container的資源(cpu,memory,network,filesystem,etc.)使用情況,按Node戈擒、Pod眶明、Container三種級別計算匯總后搜囱,通過 /stats/summary/metrics/cadvisor 兩個接口分別向API Server提供核心監(jiān)控指標、向Prometheus提供業(yè)務監(jiān)控指標

官方metrics項目實現(xiàn)

Resource Metrics API

  • Heapster 收集監(jiān)控項并將它們寫入指標存儲接收器柑土,從內(nèi)存存儲中Expose Resource Metrics API
  • Metrics Server 專門針對Resource Metrics API的輕量級內(nèi)存服務
    Custom Metrics API
  • Prometheus Adapter Custom Metrics API的一種實現(xiàn)稽屏,嘗試支持遵循標簽和命名規(guī)則的任意監(jiān)控項
  • Microsoft Azure Adapter 支持從Azure監(jiān)控系統(tǒng)檢索任意指標
  • Google Stackdriver (即將推出)
  • Datadog Cluster Agent 使用Datadog作為后端,實現(xiàn)external metrics provider狐榔。即將推出: 實現(xiàn)custom metrics provider,以支持Datadog代理收集集群內(nèi)指標
  • Kube Metrics Adapter kubernetes通用監(jiān)控指標標準適配器薄腻,可以收集和提供HPA的自定義和外部度量標準

術(shù)語

系統(tǒng)監(jiān)控項 是通用指標,通斥挚可以從被監(jiān)控的每個實體獲得(e.g. 容器和節(jié)點的CPU罢艾、Memory使用率)
系統(tǒng)監(jiān)控項分為
非核心監(jiān)控指標 不會被Kubernetes解讀楣颠;我們通常假設(shè)它們包括核心監(jiān)控項和其他監(jiān)控項
核心監(jiān)控指標 Kubernetes理解并用于運行其內(nèi)部組件和核心實用程序的指標。例如咐蚯,用于調(diào)度的指標(包括用于資源估算的算法輸入童漩,初始資源/垂直自動擴展,集群自動擴展和HPA仓蛆,不包括自定義指標)睁冬、kube dashboard和kubectl top。截止目前看疙,這將包括cpu累計使用量豆拨、內(nèi)存瞬時使用率、Pod磁盤使用量能庆、容器的磁盤使用量
自定義指標 由Prometheus Adapter提供API custom.metrics.k8s.io施禾,由此可支持任意Prometheus采集到的指標

服務監(jiān)控項 在應用程序代碼中明確定義(e.g. API server請求數(shù)量)。服務指標可以分為由Kubernetes基礎(chǔ)架構(gòu)組件生成的(因此對Kubernetes集群的操作有用)和用戶應用程序生成的指標搁胆。用作HPA輸入的服務指標有時稱為自定義指標弥搞。HPA也使用核心指標

系統(tǒng)監(jiān)控項和服務監(jiān)控項都可以來自用戶的容器或系統(tǒng)基礎(chǔ)架構(gòu)組件(API server、運行在Master中的插件以及用戶節(jié)點上運行的插件)

擴展--自定義監(jiān)控指標


場景 核心指標只包括Node渠旁、Pod的cpu攀例、內(nèi)存等,一般來說用作HPA已經(jīng)足夠了顾腊,如果想根據(jù)自定義的指標(例如QPS/5xx)來實現(xiàn)HPA粤铭,就需要使用自定義指標了。目前Kubernetes中自定義指標一般由prometheus來提供杂靶,再利用k8s-prometheus-adapter聚合到API Server梆惯,實現(xiàn)和核心(metrics-server)同樣的效果

基于原生核心資源指標的HPA

Metrics Server 集群級別的核心資源使用聚合器,通過各個節(jié)點的/stats/summary接口提供的數(shù)據(jù)來收集節(jié)點和Pod的CPU和內(nèi)存使用情況吗垮。Summary API是一種內(nèi)存高效的API垛吗,用于將數(shù)據(jù)從kubelet/cAdvisor傳遞到Metrics Server
API Server 聚合 Metrics Server 提供的核心資源指標,通過metrics.k8s.io/v1beta1 API提供給HPA做自動擴縮

基于Metrics Server核心指標的HPA鏈路

基于自定義指標的HPA

prometheus采集Pods(通常是/metricsAPI)監(jiān)控指標存儲到TSDB烁登,使用k8s-prometheus-adapter提供的擴展kubernetes custom metrics API

基于自定義指標的HPA

# example 新建一個HPA 以http_requests為度量指標怯屉,閾值設(shè)置為10
# 當qps超過閾值觸發(fā)自動擴縮(pod副本數(shù)2個~10個)
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: qps-hpa
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: qps-hpa
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metricName: http_requests
      targetAverageValue: 10

小結(jié)

有些場景下不僅需要依賴CPU/內(nèi)存使用指標來滿足SLA,大多數(shù)Web需要基于每秒請求進行自動擴展以處理任何流量突發(fā); 對于批處理應用程序饵沧,可以通過隊列長度超過某個閾值等來觸發(fā)HPA; 通過使用Prometheus檢測應用程序并Expose自動擴縮指標蚀之,可以動態(tài)調(diào)整應用程序,以更好地處理流量兔子確保高可用性

推 薦 閱 讀

https://github.com/kubernetes/metrics

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捷泞,一起剝皮案震驚了整個濱河市足删,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锁右,老刑警劉巖失受,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讶泰,死亡現(xiàn)場離奇詭異痪署,居然都是意外死亡狼犯,警方通過查閱死者的電腦和手機领铐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門绪撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幻碱,你說我怎么就攤上這事褥傍±模” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵邻耕,是天一觀的道長燕鸽。 經(jīng)常有香客問我啊研,道長鸥拧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任沟娱,我火速辦了婚禮济似,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砰蠢。我一直安慰自己,他們只是感情好律杠,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布柜去。 她就那樣靜靜地躺著碰声,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔓罚。 梳的紋絲不亂的頭發(fā)上瞻颂,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天贡这,我揣著相機與錄音,去河邊找鬼丽惭。 笑死辈双,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的换衬。 我是一名探鬼主播证芭,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼废士,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矗蕊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤忿危,失蹤者是張志新(化名)和其女友劉穎没龙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解滓,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洼裤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年腮鞍,在試婚紗的時候發(fā)現(xiàn)自己被綠了莹菱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜜徽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拘鞋,我是刑警寧澤掐禁,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布傅事,位于F島的核電站,受9級特大地震影響蹭越,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜响鹃,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一买置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蓉冈,春花似錦轩触、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽随闺。三九已至,卻和暖如春逗鸣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撒璧。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工卿樱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留繁调,地道東北人靶草。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓奕翔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捻艳。 傳聞我的和親對象是個殘疾皇子庆猫,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容