面試官常考的MySQL索引(MySQL進階)
684
2025-04-01
課程目標:
1.了解集群監(jiān)控基本方法
2.了解常見集群組件故障排錯分析方法
3.了解華為云CIE集群監(jiān)控方案架構(gòu)
目錄:
1.集群可觀測性詳解
2.常見集群故障排錯分析
3.華為云CIE集群監(jiān)控方案架構(gòu)詳解
上一節(jié)課我們了解了應(yīng)用在k8s生產(chǎn)環(huán)境中的最佳實踐,包括應(yīng)用更新與回滾,應(yīng)用健康檢查,彈性伸縮等特性。
本次課程將會帶領(lǐng)大家深入理解K8S集群監(jiān)控的最佳實踐,幫助大家構(gòu)建穩(wěn)定、可靠的云原生應(yīng)用服務(wù)。
1.集群可觀測性詳解
云原生應(yīng)用特點:
應(yīng)用架構(gòu):
1.從單體應(yīng)用向微服務(wù)過渡
2.應(yīng)用架構(gòu)過渡為松耦合系統(tǒng)
3.應(yīng)用版本迭代更快、周期更短
基礎(chǔ)設(shè)施層:
1.容器化、應(yīng)用自身快、輕、微
2.Kubernetes成為運行容器的默認平臺
3.laaS、PaaS平臺底層來承載Kubernetes平臺
軟件生命周期:
1. 服務(wù)通過DevOps流水線持續(xù)部署
2.服務(wù)變更低成本和低風險
3.呈現(xiàn)高頻率和全自動變更
K8S與云原生應(yīng)用監(jiān)控挑戰(zhàn)
K8S架構(gòu)復(fù)雜性:K8S架構(gòu)包括控制節(jié)點和工作節(jié)點。各自包含一組相互通信的組件,比如kube-apiserver,etcd, kubelet等,
微服務(wù)架構(gòu):應(yīng)用從單體到微服務(wù)架構(gòu)的轉(zhuǎn)變,導(dǎo)致應(yīng)用數(shù)量激增,相互依賴關(guān)系復(fù)雜,出現(xiàn)了問題之后,如何快速定位到發(fā)生問題的根本原因.
動態(tài)性:應(yīng)用的迭代更新更加便捷迅速,POD、Service等資源隨時可能會銷毀或重建,需要監(jiān)控系統(tǒng)具備動態(tài)發(fā)現(xiàn)k8s資源的能力。
成本:微服務(wù)的規(guī)模和動態(tài)性使得監(jiān)控數(shù)據(jù)規(guī)模和收集的成本大幅度提高。
云原生可觀測性
為了應(yīng)對云原生監(jiān)控的挑戰(zhàn),社區(qū)引入了可觀測性這一理念??捎^測性系統(tǒng)主要基于Metrics、Traces、Logs三大數(shù)據(jù)類型構(gòu)建。
Metrics:收集并存儲海量指標,通過指標閾值等手段實現(xiàn)告警通知,從而告知有沒有問題發(fā)生。
Traces:通過告警指標發(fā)現(xiàn)問題后,依據(jù)調(diào)用追蹤分析,進一步明確是什么問題。
Logs:明確了問題發(fā)生的對象或者位置后,通過日志分析等手段實現(xiàn)為什么問題會發(fā)生,即找到問題的根因。
圍繞著這三種數(shù)據(jù)類型,開源社區(qū)構(gòu)建了多種多樣的開源產(chǎn)品,像Prometheus, Cortex, node-problem-detector,Fluentd,ELK,Loki,Jaeger等。
指標監(jiān)控與prometheus
指標監(jiān)控:
指標(Metrics)是在許多個連續(xù)的時間周期里度量的KPI數(shù)值。
比如我們常常談到的一個應(yīng)用在過去十分鐘、半小時內(nèi)的CPU、內(nèi)存占用率等。
一般情況下可以將指標進行如下分類:
系統(tǒng)指標:集群CPU使用率、磁盤使用率以及網(wǎng)絡(luò)寬帶情況等等。
應(yīng)用指標:QPS、出錯率、平均延時等。
業(yè)務(wù)指標:用戶會話、訂單數(shù)量和營業(yè)額等。
Prometheus簡介:
Prometheus受啟發(fā)于Google的Brogmon監(jiān)控系統(tǒng)(相似的Kubernetes是從Google的Brog系統(tǒng)演變而來),從2012年開始由前Google前工程師在Soundcloud以開源軟件的形式進行研發(fā),并且于2015年早期對外發(fā)布早期版本。2016年5月繼Kubernetes之后成為第二個正式加入CNCF基金會的項目。
目前,Prometheus已經(jīng)成為云原生監(jiān)控領(lǐng)域的事實標準。
常見的開源指標監(jiān)控系統(tǒng)有Zabbix、Prometheus等;還有一些商業(yè)監(jiān)控產(chǎn)品,比如sysdig、dynatrace等。
Prometheus架構(gòu)
prometheus的主要特點:
自定義多維數(shù)據(jù)模型(時序列數(shù)據(jù)由metric名和一組key/value標簽組成)。
非常高效的存儲,平均一個采樣數(shù)據(jù)占~3.5 bytes左右,320萬的時間序列,每30秒采樣,保存60天,消耗磁盤大概228G。
在多維度上靈活且強大的查詢語言(promQL),支持sum,rate,max,min等大量的計算函數(shù)。
不依賴分布式存儲,支持單節(jié)點工作。
基于pull方式采集時序數(shù)據(jù)。
可以通過push gateway進行時序列數(shù)據(jù)推送(pushing)。
可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的target。
社區(qū)支持大量的第三方exporter和client庫。
基于Prometheus-operator集群監(jiān)控
prometheus-operator:本質(zhì)是一組CRD和controller的實現(xiàn),prometheus operator提供如下幾類CRD:
Prometheus:聲明式創(chuàng)建和管理Prometheus Server實例;
ServiceMonitor:負責聲明式的管理監(jiān)控配置;
PrometheusRule:負責聲明式的管理告警配置;
Alertmanager:聲明式的創(chuàng)建和管理Alertmanager實例。
簡言之,Prometheus Operator能夠幫助用戶自動化的創(chuàng)建以及管理Prometheus Server以及其相應(yīng)的配置。
集群事件監(jiān)控
k8s的Event事件是一種資源對象,用于展示集群內(nèi)發(fā)生的情況,k8s系統(tǒng)中的各個組件會將運行時發(fā)生的各種事件上報給apiserver??梢酝ㄟ^kubectl get event或kubectl describe pod podName 命令顯示事件,查看k8s集群中發(fā)生了哪些事件。
apiserver會將Event事件存在etcd集群中,為避免磁盤空間被填滿,故強制執(zhí)行保留策略:在最后一次的事件發(fā)生后,刪除1小時之前發(fā)生的事件。
集群日志監(jiān)控(fluentd +ELK)
日志在K8S里面主要分為四個大的場景:
1.主機內(nèi)核的日志:比如文件系統(tǒng)異常,kernelpanic,或者〇OM日志等。
2.Runtime日志:比較常見的是Docker的一些日志,我們可以通過docker的日志來排查類似像Pod Hang這一系列的問題。
3.核心組件日志:在K8s 里面核心組件包含了etcd,apiserver、kube-scheduler、controller-manger、kubelet 等等一系列的組件。這些組件的日志可以幫我們來看到整個K8s集群管控面是否有一些異常。
4.應(yīng)用日志:可以通過應(yīng)用的日志來查看業(yè)務(wù)層的一個狀態(tài)。比如說可以看業(yè)務(wù)層有沒有500的請求?有沒有一些panic?有沒有一些異常的錯誤訪問?那這些其實都可以通過應(yīng)用日志來進行查看的。
拓撲與調(diào)用鏈
當我將單體應(yīng)用拆成多個微服務(wù)之后,如何監(jiān)控服務(wù)之間的依賴關(guān)系和調(diào)用鏈,以判斷應(yīng)用在哪個服務(wù)環(huán)節(jié)出了問題,哪些地方可以優(yōu)化?這就需要用到分布式追蹤(Distributed Tracing)。
CNCF 提出了分布式追蹤的標準OpenTracing,它提供用戶廠商中立的API,并提供Go、Java、JavaScript、Python、Ruby、PHP、Objective-C、C++和C#這多種語言的庫。
同時CNCF中還有個端到端的支持OpenTracingAPI的分布式追蹤項目Jaeger。
2.常見集群故障排錯分析
集群常見問題排障
k8s常用排錯方法:
查看Kubernetes對象的當前運行時信息,特別是與對象關(guān)聯(lián)的Event事件。這些事件記錄了相關(guān)主題、發(fā)生時間、最近發(fā)生時間、發(fā)生次數(shù)及事件原因等,對排查故障非常有價值。
對于服務(wù)、容器方面的問題,可能需要深入容器內(nèi)部進行故障診斷,此時可以通過查看容器的運行日志來定位具體問題。
對于某些復(fù)雜問題,例如Pod調(diào)度這種全局性的問題,可能需要結(jié)合集群中每個節(jié)點上的Kubernetes服務(wù)日志來排查。比如搜集Master上的kube-apiserver、kube-schedule、kube-controler-manager服務(wù)日志,以及各個Node上的kubelet、kube-proxy服務(wù)日志,通過綜合判斷各種信息來定位問題。
常見K8S問題舉例:
1.無法下載鏡像
2. POD持續(xù)重啟
3.通過Service無法訪問
3.華為云CIE集群監(jiān)控方案架構(gòu)詳解
容器洞察引擎(Container Insight Engine)提供跨集群集中統(tǒng)一的云原生容器應(yīng)用監(jiān)控運維能力,支持多集群集中告警、事件管理,指標管理和分布式調(diào)用鏈跟蹤能力。借助CIE,用戶可以在華為云上獲得容器化應(yīng)用的全棧易用的可觀測性能力。
架構(gòu)特點:
1.全面兼容云原生技術(shù)
基于原生K8s+Prometheus的監(jiān)控架構(gòu)體系,增強了開箱即用的能力。從容應(yīng)對容器生命周期動態(tài)變化、海量指標的挑戰(zhàn)。
2.以應(yīng)用為中心,聚焦業(yè)務(wù)指標
聚焦應(yīng)用Golden Signal (RPS,Error,Duration)等,并適時關(guān)聯(lián)資源指標。
3.Everything in One Place,快捷排障
應(yīng)用全景視圖和資源映射,可以無縫關(guān)聯(lián)告警、事件、日志等信息。
分布式調(diào)用鏈和依賴拓撲,應(yīng)對服務(wù)網(wǎng)格化,支持快速排障。
4.一鍵診斷,主動預(yù)測預(yù)警
一鍵式集群業(yè)務(wù)診斷,關(guān)鍵指標主動預(yù)測,提前預(yù)警
集中告警/事件/日志:具備多集群告警、事件、日志統(tǒng)一管理能力;
告警通知靈活:支持基于PromQL表達式的閾值告警,支持K8s事件轉(zhuǎn)告警能力,告警可通過郵件,短信、webhook等通道及時通知給用戶;
統(tǒng)一日志存儲:支持多種日志存儲方式,支持日志瀏覽、統(tǒng)計聚合;支持日志關(guān)鍵詞告警;
本課總結(jié):
Prometheus:云原生監(jiān)控系統(tǒng),云原生監(jiān)控事實標準。
K8s Event:K8s Event是一種資源對象,用于展示集群內(nèi)發(fā)生的情況,k8s系統(tǒng)中的各個組件會將運行時發(fā)生的各種事件上報給apiserver.
Fluentd:fluentd是一個針對日志的收集、處理、轉(zhuǎn)發(fā)系統(tǒng)。通過豐富的插件系統(tǒng),可以收集來自于各種系統(tǒng)或應(yīng)用的日志,轉(zhuǎn)化為用戶指定的格式后,轉(zhuǎn)發(fā)到用戶所指定的日志存儲系統(tǒng)之中。
Jaeger:Jaeger是Uber開源的分布式跟蹤系統(tǒng),現(xiàn)在已經(jīng)成為CNCF的開源項目,其靈感來源于Google的Dapper和twitter的Zipkin
參考鏈接:
Prometheus官方文檔: https://prometheus.io/docs/introduction/overview/
NodeProblemDetector代碼倉庫: https://github.com/kubernetes/node-problem-detector
kubernetes-event-exporter代碼倉庫: https://github.com/opsgenie/kubernetes-event-exporter
Kubernetes 云原生 運維
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。