基于 eBPF 的 Kubernetes 問(wèn)題排查全景圖發(fā)布
作者:李煌東
當(dāng) Kubernetes?成為云原生事實(shí)標(biāo)準(zhǔn),可觀測(cè)性挑戰(zhàn)隨之而來(lái)
Cloud Native
當(dāng)前,云原生技術(shù)以容器技術(shù)為基礎(chǔ),通過(guò)標(biāo)準(zhǔn)可擴(kuò)展的調(diào)度、網(wǎng)絡(luò)、存儲(chǔ)、容器運(yùn)行時(shí)接口來(lái)提供基礎(chǔ)設(shè)施。同時(shí),通過(guò)標(biāo)準(zhǔn)可擴(kuò)展的聲明式資源和控制器來(lái)提供運(yùn)維能力,兩層標(biāo)準(zhǔn)化推動(dòng)了開(kāi)發(fā)與運(yùn)維關(guān)注點(diǎn)分離,各領(lǐng)域進(jìn)一步提升規(guī)?;蛯I(yè)化,達(dá)到成本、效率、穩(wěn)定性的全面優(yōu)化。

無(wú)法準(zhǔn)確清晰了解、掌控全局的系統(tǒng)運(yùn)行架構(gòu); 無(wú)法回答應(yīng)用之間的連通性是否正確;
多語(yǔ)言、多網(wǎng)絡(luò)調(diào)用協(xié)議帶來(lái)埋點(diǎn)成本呈線性增長(zhǎng),且重復(fù)埋點(diǎn) ROI 低,開(kāi)發(fā)一般將這類需求優(yōu)先級(jí)降低,但可觀測(cè)數(shù)據(jù)又不得不采集。
解決思路與技術(shù)方案
Cloud Native



從監(jiān)測(cè)系統(tǒng)到可觀測(cè)性
Cloud Native

2、自頂向下全棧關(guān)聯(lián):以 Pod 為媒介,Kubernetes 層面關(guān)聯(lián) Workload、Service 等對(duì)象,基礎(chǔ)設(shè)施層面可以關(guān)聯(lián)節(jié)點(diǎn)、存儲(chǔ)設(shè)備、網(wǎng)絡(luò)等,應(yīng)用層面關(guān)聯(lián)日志、調(diào)用鏈路等。

請(qǐng)求數(shù)/QPS 響應(yīng)時(shí)間及分位數(shù)(P50、P90、P95、P99)
錯(cuò)誤數(shù) 慢調(diào)用數(shù)

系統(tǒng)架構(gòu)感知:系統(tǒng)架構(gòu)圖是程序員了解一個(gè)新系統(tǒng)的重要參考,當(dāng)拿到一個(gè)系統(tǒng),起碼需要知曉流量入口在哪里,有哪些核心模塊,依賴了哪些內(nèi)部外部組件等。在異常定位過(guò)程中,有一張全局架構(gòu)的圖對(duì)異常定位進(jìn)程有非常大推動(dòng)作用。
依賴分析:有一些問(wèn)題是出現(xiàn)在下游依賴,如果這個(gè)依賴不是自己團(tuán)隊(duì)維護(hù)就會(huì)比較麻煩,當(dāng)自己系統(tǒng)和下游系統(tǒng)沒(méi)有足夠的可觀測(cè)性的時(shí)候就更麻煩了,這種情況下就很難跟依賴的維護(hù)者講清楚問(wèn)題。在我們的拓?fù)渲?,通過(guò)將黃金指標(biāo)的上下游用調(diào)用關(guān)系連起來(lái),形成了一張調(diào)用圖。邊作為依賴的可視化,能查看對(duì)應(yīng)調(diào)用的黃金信號(hào)。有了黃金信號(hào)就能快速地分析下游依賴是否存在問(wèn)題。



負(fù)載均衡無(wú)法訪問(wèn)某個(gè) Pod,這個(gè) Pod 上的流量為 0,需要確定是否這個(gè) Pod 網(wǎng)絡(luò)有問(wèn)題,還是負(fù)載均衡配置有問(wèn)題;
某個(gè)節(jié)點(diǎn)上的應(yīng)用似乎性能都很差,需要確定是否節(jié)點(diǎn)網(wǎng)絡(luò)有問(wèn)題,通過(guò)對(duì)別的節(jié)點(diǎn)網(wǎng)絡(luò)來(lái)達(dá)到;
鏈路上出現(xiàn)丟包,但不確定發(fā)生在那一層,可以通過(guò)節(jié)點(diǎn)、Pod、容器這樣的順序來(lái)排查。

Kubernetes?可觀測(cè)性全景視角
Cloud Native
大體結(jié)構(gòu)上是以服務(wù)和 Deployment(應(yīng)用)為入口,大多數(shù)開(kāi)發(fā)只需要關(guān)注這一層就行了。重點(diǎn)關(guān)注服務(wù)和應(yīng)用是否錯(cuò)慢,服務(wù)是否連通,副本數(shù)是否符合預(yù)期等
再往下一層是提供真正工作負(fù)載能力的 Pod。Pod 重點(diǎn)關(guān)注是否有錯(cuò)慢請(qǐng)求,是否健康,資源是否充裕,下游依賴是否健康等
最底下一層是節(jié)點(diǎn),節(jié)點(diǎn)為 Pod 和服務(wù)提供運(yùn)行環(huán)境和資源。重點(diǎn)關(guān)注節(jié)點(diǎn)是否健康,是否處于可調(diào)度狀態(tài),資源是否充裕等。
Kubernetes 的網(wǎng)絡(luò)架構(gòu)復(fù)雜度高,節(jié)點(diǎn)、Pod、容器、服務(wù)、VPC 交相輝映,簡(jiǎn)直能讓你眼花繚亂; 網(wǎng)絡(luò)問(wèn)題排查需要一定的專業(yè)知識(shí),大多數(shù)對(duì)網(wǎng)絡(luò)問(wèn)題都有種天生的恐懼; 分布式 8 大謬誤告訴我們網(wǎng)絡(luò)不是穩(wěn)定的、網(wǎng)絡(luò)拓?fù)湟膊灰怀刹蛔兊?、延時(shí)不可忽視,造成了端到端之間的網(wǎng)絡(luò)拓?fù)洳淮_定性。
conntrack 記錄滿問(wèn)題; IP 沖突;
CoreDNS 解析慢、解析失??; 節(jié)點(diǎn)沒(méi)開(kāi)外網(wǎng)。(對(duì),你沒(méi)聽(tīng)錯(cuò));
服務(wù)訪問(wèn)不通; 配置問(wèn)題(LoadBalance 配置、路由配置、device 配置、網(wǎng)卡配置);
網(wǎng)絡(luò)中斷造成整個(gè)服務(wù)不可用。
網(wǎng)絡(luò)流量和帶寬; 丟包數(shù)(率)和重傳數(shù)(率);
RTT。





橫向:主要是端到端層面來(lái)看,首先看自己服務(wù)的黃金指標(biāo)是否有問(wèn)題,再逐步看下游的網(wǎng)絡(luò)指標(biāo)。注意如果從客戶端來(lái)看調(diào)用下游耗時(shí)高,但從下游本身的黃金指標(biāo)來(lái)看是正常的,這時(shí)候非常有可能是網(wǎng)絡(luò)問(wèn)題或者操作系統(tǒng)層面的問(wèn)題,此時(shí)可以用網(wǎng)絡(luò)性能指標(biāo)(流量、丟包、重傳、RTT 等)來(lái)確定。
縱向:確定應(yīng)用本身對(duì)外的延時(shí)高了,下一步就是確定具體哪個(gè)原因了,確定哪一步/哪個(gè)方法慢可以用火焰圖來(lái)看。如果代碼沒(méi)有問(wèn)題,那么可能執(zhí)行代碼的環(huán)境是有問(wèn)題的,這時(shí)可以查看系統(tǒng)的 CPU/Memory 等資源是否有問(wèn)題來(lái)做進(jìn)一步排查。





總結(jié)
Cloud Native
- END - ?推薦閱讀? 31天拿下K8s含金量最高的CKA+CKS證書(shū)! 一文掌握 Ansible 自動(dòng)化運(yùn)維 Linux 使用 Systemd 管理進(jìn)程服務(wù),劃重點(diǎn)~ Linux的10個(gè)最危險(xiǎn)命令 Kubernetes網(wǎng)絡(luò)難懂?可能是沒(méi)看到這篇文章 100個(gè)Linux Shell腳本經(jīng)典案例(附PDF) 24 個(gè) Docker 常見(jiàn)問(wèn)題處理技巧 23 款 DevOps 工具建設(shè)云原生時(shí)代 Shell分析日志文件,全面解鎖新姿勢(shì)! 這篇文章帶你全面掌握 Nginx ! 一文搞懂 Kubernetes 網(wǎng)絡(luò)通信原理 SRE本質(zhì)就是一個(gè)懂運(yùn)維的資深開(kāi)發(fā) Kubernetes 4000節(jié)點(diǎn)運(yùn)維經(jīng)驗(yàn)分享 Kubernetes 的高級(jí)部署策略,你不一定知道! 基于Nginx實(shí)現(xiàn)灰度發(fā)布與AB測(cè)試 搭建一套完整的企業(yè)級(jí) K8s 集群(kubeadm方式) 點(diǎn)亮,服務(wù)器三年不宕機(jī)
評(píng)論
圖片
表情


