【云駐共創】華為云原生之Kubernetes運維管理詳解(下)
前言
《云原生王者之路集訓營》是華為云云原生團隊精心打磨的云原生學習技術公開課,分為黃金、鉆石、王者三個階段,幫助廣大技術愛好者快速掌握云原生相關技能。本課程為黃金課程的第九課,由華為云容器洞察引擎CIE團隊高級工程師 Roc主講,帶領大家深入理解K8S集群監控的最佳實踐,幫助大家構建穩定、可靠的云原生應用服務。
目標學員:計算機、軟件工程等專業的大學生,涉及Kubernetes、Istio等技術的應用開發者,其他的云原生技術興趣愛好。學完本課程后,您將能夠:了解集群監控基本方法;了解常見集群組件故障排錯分析方法;了解華為云CIE集群監控方案架構。
上一節課我們了解了應用在k8s生產環境中的最佳實踐,包括應用更新與回滾,應用健康檢查彈性伸縮等特性。本次課程將會帶領大家深入理解K8S集群監控的最佳實踐,幫助大家構建穩定、可靠的云原生應用服務。
一 集群可觀測性詳解
1.1 云原生應用的特點
首先要明白云原生要具備云的天然基因,天生就是云的一部分。云原生不是為云而生,而是天生就是云,生而是云,所以它具有云的特性:通過網絡訪問、遠端部署執行、可擴展彈性伸縮、共享、按需使用自助服務、高可用、可遠程監控計費審計、標準化交付與位置無關等。
應用架構:
從單體應用向微服務過渡
應用架構過渡為松耦合系統
應用版本迭代更快、 周期更短
基礎設施層:
容器化、應用自身快、輕、微
Kubernetes 成為運行容器的默認平臺
laaS、PaaS 平臺底層來承載Kubernetes平臺
3. 軟件生命周期:
服務通過DevOps流水線持續部署
服務變更低成本和低風險
呈現高頻率和全自動變更
1.2 K8S與云原生應用監控挑戰
雖然云原生為企業數字化帶來了非常多的好處,但同時針對K8S與云原生應用的監控也帶來了諸多挑戰。
K8S架構復雜性: K8S架構包括控制節點和工作節點,各自包含一組相互通信的組件,比如kube-apiserver, etcd, kubelet等。
微服務架構:應用從單體到微服務架構的轉變,導致應用數量激增,相互依賴關系復雜,出現了問題之后,如何快速定位到發生問題的根本原因。
動態性:應用的迭代更新更加便捷迅速,POD、Service等資源隨時可能會銷毀或重建,需要監控系統具備動態發現k8s資源的能力。
成本:微服務的規模和動態性使得監控數據規模和收集的成本大幅度提高。
1.3 云原生可觀測性
為了應對云原生監控的挑戰,社區引入了可觀測性這一理念。 可觀測性系統主要基于Metrics、Traces、 Logs三大數據類型構建。
Metrics:收集并存儲海量指標,通過指標閾值等手段實現告警通知,從而告知有沒有問題發生。
Traces:通過告警指標發現問題后,依據調用追蹤分析,進一步明確是什么問題。
Logs:明確了問題發生的對象或者位置后,通過日志分析等手段實現為什么問題會發生,即找到問題的根因。
圍繞著這三種數據類型,開源社區構建了多種多樣的開源產品,像Prometheus, Cortex, node-problem-detector, Fluentd, ELK, Loki,Jaeger等。
1.4 指標監控與prometheus
1.4.1 指標監控
指標(Metrics) 是在許多個連續的時間周期里度量的KPI數值。比如我們常常談到的一個應用在過去十分鐘、半小時內的CPU、內存占用率等。
一般情況下可以將指標進行如下分類:
系統指標:集群CPU使用率、磁盤使用率以及網絡寬帶情況等等。
應用指標: QPS、 出錯率、平均延時等。
業務指標:用戶會話、訂單數量和營業額等。
常見的開源指標監控系統有Zabbix、Prometheus等; 還有一些商業監控產品,比如sysdig. dynatrace等。
1.4.2 Prometheus簡介
Prometheus受啟發于Google的Brogmon監控系統(相似的Kubernetes是從Google的Brog系統演變而來), 從2012年開始由前Google前工程師在Soundcloud以開源軟件的形式進行研發,并且于2015年早期對外發布早期版本。201 6年5月繼Kubernetes之后成為第二個正式加入CNCF基金會的項目。目前,Prometheus已經成為云原生監控領域的事實標準。
在kubernetes容器管理系統中,通常會搭配prometheus進行監控,同時也支持多種exporter采集數據,還支持pushgateway進行數據上報,Prometheus性能足夠支撐上萬臺規模的集群。
1.5 prometheus的主要特點
監控工具prometheus具備完整的監控體系,其特點如下:
自定義多維數據模型(時序列數據由metric名和一組key/value標簽組成)。
非常高效的存儲,平均一個采樣數據占~3.5 bytes左右,320萬的時間序列,每30秒采樣,保存60天,消耗磁盤大概228G。
在多維度上靈活且強大的查詢語言(promQL),支持sum, rate,max,min等大量的計算 函數。
不依賴分布式存儲,支持單節點工作。
基于pull方式采集時序數據。
可以通過push gateway進行時序列數據推送(pushing)。
可以通過服務發現或者靜態配置去獲取要采集的target。
社區支持大量的第三方exporter和client庫。
1.6 基于prometheus-operator集群監控
prometheus-operator: 本質是一組CRD和controller的實現,prometheus operator提供如下幾類CRD:
Prometheus:聲明式創建和管理Prometheus Server實例;
ServiceMonitor:負責聲明式的管理監控配置;
PrometheusRule:負責聲明式的管理告警配置;
Alertmanager:聲明式的創建和管理Alertmanager實例;
Prometheus Operator能夠幫助用戶自動化的創建以及管理Prometheus Server以及其相應的配置。
prometheus-operator為了實現更方便的監控K8s中各類資源,利用watch機制關注自定義CRDs,通過prometheus來從不同的資源中pull拉去監控指標,通過Alertmanager來發送告警,通過Grafana來實現可視化。
1.7 K8S集群監控指標解析
K8s集群監控指標主要分為四個維度,從容器的基礎資源例如container_cpu_usage_seconds_total來獲取容器的各類運行指標;
K8s資源指標主要監控K8s中各類資源的運行狀態;K8s服務組件指標主要包含K8s核心組件的各類運行指標,通過這類指標可以監控K8s整個集群的運行狀態;Pod業務埋點指標,根據業務場景自定義指標,比如地訂單數量,交易失敗次數等,來反饋業務運行狀態。
1.8 基于Grafana指標可視化
grafana是用于可視化大型測量數據的開源程序,他提供了強大和優雅的方式去創建、共享、瀏覽數據。dashboard中顯示了你不同metric數據源中的數據。
Grafana是一個開源的,擁有豐富dashboard和圖表編輯的指標分析平臺,和Kibana不同的是Grafana專注于時序類圖表分析,而且支持多種數據源,如Graphite、InfluxDB、Elasticsearch、Mysql、K8s、Zabbix等。
容器內存使用率
1.9 集群事件監控
k8s的Event事件是一種資源對象, 用于展示集群內發生的情況,k8s系統中的各個組件會將運行時發生的各種事件上報給apiserver。可以通過kubectl get event或kubectl describe pod podName命令顯示事件,查看k8s集群中發生了哪些事件。
apiserver會將Event事件存在etcd集群中,為避免磁盤空間被填滿,故強制執行保留策略:在最后一次的事件發生后, 刪除1小時之前發生的事件。
通過監控集群狀態,能更深層次的了解業務具體發生了什么類型的事件,從而對癥下藥,提升問題解決效率。
1.10 NodeProblemDetector (NPD)
節點問題檢測器(Node Problem Detector, NPD)是-個守護程序,用于監視和報告節點的健康狀況。
可以將NPD以DaemonSet運行。NPD從各種守護進程收集節點問題,并以NodeCondition和Event的形式報告給APIServer。
通過NPD,可以有效監控Node節點各類指標,從而更全方位的保障集群穩定性,預見一些資源問題風險,及時規避。
1.11 集群日志監控(fluentd+ELK)
針對K8s集群中業務日志監控,在K8S里面主要分為四個大的場景:
主機內核的日志:比如文件系統異常,kernelpanic,或者OOM日志等。
Runtime日志:比較常見的是Docker的一些日志,我們可以通過docker的日志來排查類似像Pod Hang這一系列的問題。
核心組件日志:在K8s里面核心組件包含了etcd,apiserver、kube-scheduler、 controller-manger、kubelet等等一系列的組件。 這些組件的日志可以幫我們來看到整個K8s集群管控面是否有一些異常。
應用日志:可以通過應用的日志來查看業務層的一個狀態。比如說可以看業務層有沒有500的請求?有沒有一些 panic?有沒有一些異常的錯誤訪問?那這些其實都可以通過應用日志來進行查看的。
1.12 拓撲與調用鏈
當我將單體應用拆成多個微服務之后,如何監控服務之間的依賴關系和調用鏈,以判斷應用在哪個服務環節出了問題,哪些地方可以優化?這就需要用到分布式追蹤(Distributed Tracing)。
CNCF提出了分布式追蹤的標準OpenTracing,它提供用戶廠商中立的API,并提供Go、Java、JavaScript、Python、 Ruby、 PHP、Objective-C、C++和C#這多種語言的庫。同時CNCF中還有個端到端的支持OpenTracingAPI的分布式追蹤項目Jaeger。
二 集群常見問題排障
2.1 k8s常用排錯方法:
查看Kubernetes對象的當前運行時信息,特別是與對象關聯的Event事件。這些事件記錄了相關主題、發生時間、最近發生間、發生次數及事件原因等,對排查故障非常有價值。
對于服務、容器方面的問題,可能需要深入容器內部進行故障診斷,此時可以通過查看容器的運行日志來定位具體問題。
對于某些復雜問題,例如Pod調度這種全局性的問題,可能需要結合集群中每個節點上的Kubernetes服務日志來排查。比如搜集Master.上的kube-apiserver、kube-schedule、 kube-controler-manager服務日志,以及各個Node.上的kubelet.kube-proxy服務日志,通過綜合判斷各種信息來定位問題。
2.2 常見K8S問題舉例
無法下載鏡像:需要定位鏡像是否存儲,或者是否為K8s網絡與鏡像倉庫無法聯通,或者是私有鏡像權限問題等;
POD持續重啟 :查看業務是否運行異常,或是配置的存活性探針異常。
通過Service無法訪問:查看業務POD是否正常,lable選擇器是否匹配到對應業務POD,端口是否正常等。
2.3 實戰案例
可以看到nginx 應用啟動異常
使用華為云提供的cloud shell工具
通過命令行定位問題,首先查看pod狀態,看到有三個pod運行異常
查看pod事件發現是pod的Liveness檢測失敗,返回狀態碼為404,找不到文件。
查看Liveness配置為/test
通過CCE集群對資源文件進行修正,修改/test為/。
可以看到此刻POD以及恢復正常。
三 華為云CIE集群監控方案架構詳解
3.1 華為云容器洞察引擎(CIE) 架構解析
容器洞察引擎(Container Insight Engine,簡稱CIE)是以應用為中心、開箱即用的新一代云原生容器運維平臺,實時監控應用及資源,采集各項指標及事件等數據分析應用健康狀態,提供告警能力以及全面、清晰、多維度數據可視化能力,兼容主流開源組件,并提供快捷故障定位及一鍵監控診斷的能力。
架構特點:
全面兼容云原生技術
基于原生K8s + Prometheus的監控架構體系,增強了開箱即用的能力。
從容應對容器生命周期動態變化、海量指標的挑戰。
2. 以應用為中心,聚焦業務指標
聚焦應用Golden Signal (RPS, Error, Duration) 等,并適時關聯資源指標。
3. Everything in One Place,快捷排障
應用全景視圖和資源映射,可以無縫關聯告警、事件、日志等信息。
分布式調用鏈和依賴拓撲,應對服務網格化,支持快速排障。
4. 一鍵診斷,主動預測預警
鍵式集群業務診斷,關鍵指標主動預測,提前預警。
3.2 集中統一的告警、事件管理和日志分析
集中告警/事件/日志:具備多集群告警、事件、日志統一管理能力;
告警通知靈活:支持基于PromQL表達式的閾值告警,支持K8s事件轉告警能力,告警可通過郵件,短信、webhook等通道及時通知給用戶;
統一日志存儲:支持多種日志存儲方式,支持日志瀏覽、統計聚合;支持日志關鍵詞告警;
3.3 快速故障定位
資源模型統一建模:告警、日志、指標、事件運維數據對應的資源信息拉通統一, 同一個資源ID關聯一片相關運維數據。
運維信息ALL in One:
在告警、資源視圖、巡檢報告中提供-鍵式TroubleShooting入口,-鍵萃取資源故障相關信息。
圖形化資源關系視圖,提供集群、節點、Pod實例、容器全景資源視圖,實現故障渲染,提升故障發現效率。
提供定期巡檢,一鍵巡檢并展示巡檢報告,讓用戶時刻感知集群狀態。
全鏈路應用調用分析:
借力ASM lstio, 提供全鏈路應用拓撲,結合MCP實現集群內和跨集群的應用拓撲展示。
非侵入試Agent埋點能力,實現基于業務的SLA指標監控。
總結
可觀測性是云原生場景必不可少的一環,關系到云原生實踐能否在生產環境順利實施。可觀測性技術實施具有技術棧多樣,場景復雜,數據規模大等特點,這給人們云原生實踐帶來了很大的障礙。開源社區針對這個問題,著手構建統一的云原生可觀測性技術與規范;各大云廠商與監控服務提供商也都看到了需求和機遇,陸續推出云原生可觀測性相關的產品或功能。
目前,云原生可觀測性還在發展初期,很多產品都在探索階段,還有很多問題亟待解決。未來人們對可觀測性的需求只會越來越高,華為云CIE緊跟社區最新標準與方案,在監控運維上,強調數據關聯分析和無縫銜接,用戶無需到各個頁面頻繁跳轉,在一個地方就可以對問題進行集中分析和診斷,實現一鍵式故障分析,大大縮短問題定位定界的時間。
本文整理自華為云社區【內容共創】活動第14期。
https://bbs.huaweicloud.com/blogs/336904
任務19.華為云云原生鉆石課程09:Kubernetes運維管理詳解(下)
應用運維管理 AOM 上云必讀 云原生 容器 Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。