簡單、有效、全面的Kubernetes監控方案
簡介:近年來,Kubernetes作為眾多公司雲原生改造的首選容器化編排平臺,越來越多的開發和運維工作都圍繞Kubernetes展開,保證Kubernetes的穩定性和可用性是最基礎的需求,而這其中最核心的就是如何有效地監控Kubernetes叢集,保證整個叢集的一個良好的可觀察性。本期將為大家介紹Kubernetes的監控方案。
前言
近年來,Kubernetes作為眾多公司雲原生改造的首選容器化編排平臺,越來越多的開發和運維工作都圍繞Kubernetes展開,保證Kubernetes的穩定性和可用性是最基礎的需求,而這其中最核心的就是如何有效地監控Kubernetes叢集,保證整個叢集的一個良好的可觀察性。本期將為大家介紹Kubernetes的監控方案。
監控方案目標
目前存在多套的Kubernetes監控方案,但實際實施起來可能會遇到很多問題,例如方案部署難、監控指標不準、沒有合適的大盤、不知道哪些指標需要哪些不需要、資料太多很卡等等。其實這些問題的本質上還是因為Kubernetes的架構相對標準的虛擬機器/物理機的方式要複雜很多,而面對複雜系統,就需要我們去做非常多的工作,例如:
- 明確監控目標:K8s內部的各類系統元件:APIServer、ETCD、Scheduler、Controller Manager、Kubelet等;K8s底層,例如虛擬機器、物理機的監控;K8s之上的業務/出口等
- 相關監控資料採集:例如部署kube-state-metrics採集K8s內資源物件的資料;通過kubelet暴露的prometheus埠拉取執行的Pod、容器指標;通過service埠採集APIServer、ETCD、Scheduler等元件的指標
- 後端建設:搭建資料儲存、視覺化、告警等後端服務
- 內容建設:配置監控大盤、問題排查經驗、每個元件監控的黃金指標、告警模板等
- 方案穩定性建設:包括資料採集、儲存、視覺化、告警等服務的質量監控和維護
SLS全棧監控方案
SLS作為阿里可觀測性資料引擎,具備可觀測資料日誌、指標、分散式鏈路追蹤、事件等的一站式採集和儲存。為了便於使用者快速接入和監控業務系統,SLS提供了
- 實時監控各類系統,包括主機監控、Kubernetes監控、資料庫監控、中介軟體監控等。
- 支援ECS、K8s一鍵安裝,支援圖形化的監控配置管理,無需登入主機配置採集監控項。
- 運維老司機多年經驗的報表總結,包括資源總覽、水位監控、熱點分析、詳細指標等數十個報表。
- 支援自定義的分析,支援包括PromQL、SQL92等多種分析語法。
- 支援對接AIOps指標巡檢,利用機器學習技術自動發現異常指標。
- 支援自定義告警配置,告警通知直接對接訊息中心、簡訊、郵件、語音(電話)、釘釘,並支援對接自定義WebHook。
Kubernetes監控最佳實踐
SLS全棧監控已經內建了對於Kubernetes監控的支援,並且解決了非常多的Kubernetes監控的痛點需求,例如:
- 部署簡單,只需要一條命令就可以部署完整的Kubernetes監控方案
- 使用簡單,內建了多種Kubernetes以及上下游相關的監控報表,開箱即用
- 運維簡單,所有的監控資料、報表、告警等後端都是雲化,只需要按量付費即可,無需去運維監控的例項
- 覆蓋面全,監控範圍包括Kubernetes中的各種內建元件,也包括相關聯的主機、中介軟體、資料庫等監控
部署
SLS全棧監控的Kubernetes部署方式相對比較簡單,只需要按照接入頁面中的提示,安裝AliyunLogConfig自定義資源和監控元件,兩個安裝步驟只需要執行兩個命令即可。
- 相關參考(1.
使用
Kubernetes監控部署完畢後就會自動部署採集Agent並採集監控資料到雲端,預設採集的監控資料有:
- Kubernetes系統的元資料資訊,例如節點、Pod、Deployment等配置資訊
- Kubernetes系統元件的監控資料,包括APIServer、ETCD、Kubelet等
- Kubernetes上執行的Deployment、StatefullSet、DaemonSet、Pod、容器指標資訊
- 節點的基礎指標,例如節點CPU、記憶體、網路、磁碟IO等
資料採集到雲端後,SLS全棧監控會預設提供一系列的Dashboard模板,包括叢集級、應用級(Deployment、StatefullSet、DaemonSet等)、Pod級各類指標,絕大部分場景的監控只需要使用內建的Dashboard大盤即可,內建大盤主要有:
儀表盤 |
說明 |
資源總覽 |
用於實時視覺化展示主機配置資訊和指標資訊的總體情況,包括CPU核數、磁碟總空間、CPU平均使用率、記憶體平均使用率等。 |
主機列表 |
用於實時視覺化展示每臺主機的配置資訊和指標資訊,包括CPU核數、記憶體、CPU使用率、記憶體使用率等。 |
熱點分析 |
用於實時視覺化熱點機器的CPU、記憶體等資源使用情況,包括CPU熱點指標分佈、記憶體熱點指標分佈、Top CPU使用率、Top 記憶體使用率等。 |
單機指標-簡 |
用於實時視覺化展示主機的CPU、記憶體等資源的使用趨勢,包括CPU使用率、磁碟空間使用率、記憶體使用率等。 |
單機指標-詳 |
用於實時視覺化展示主機的CPU、記憶體等資源處於不同狀態的使用趨勢,包括CPU(處於Total、System、User、IOWait狀態的CPU使用趨勢)、記憶體(處於Total、Availableused、Used狀態的記憶體使用趨勢)等。 |
資源總覽 |
用於實時視覺化展示Kubernetes中資源的使用情況,包括Pod、Host、Service、Deployment等。 |
水位監控 |
用於實時視覺化展示Kubernetes中資源的水位情況,包括Pod執行數、CPU總數、檔案系統使用量等。 |
執行時監控 |
用於實時視覺化展示Kubernetes中處於執行狀態的資源資訊,包括Deployment執行數量、Daemonset執行數量等。 |
核心元件監控 |
用於實時視覺化展示Kubernetes中核心元件的相關資料,包括ETCD物件數、ETCD請求QPS等。 |
Node列表 |
用於實時視覺化展示Node的整體情況以及每個Node的配置資訊和指標資訊,包括Node總數、執行中的Pod總數等。 |
Node指標 |
用於實時視覺化展示Node的指標資訊,包括可申請Pod數量、CPU使用率等。 |
Pod列表 |
用於實時視覺化展示Pod的整體情況以及每個Pod的配置資訊和指標資訊,包括可申請的Pod總數等。 |
Pod指標 |
用於實時視覺化展示Pod的指標資訊,包括Pod基本資訊、容器基礎資訊等。 |
Deployment列表 |
用於實時視覺化展示每個Deployment的配置資訊和指標資訊,包括Deployment所屬名稱空間、叢集等。 |
Deployment指標 |
用於實時視覺化展示Deployment的指標資訊,包括CPU Limit使用率、記憶體Limit使用率等。 |
StatefulSet列表 |
用於實時視覺化展示每個StatefulSet的配置資訊和指標資訊,包括StatefulSet所屬名稱空間、叢集等。 |
StatefulSet指標 |
用於實時視覺化展示StatefulSet的指標資訊,包括CPU Limit使用率、記憶體Limit使用率等。 |
DaemonSet列表 |
用於實時視覺化展示每個DaemonSet的配置資訊和指標資訊,包括DaemonSet所屬名稱空間、叢集等。 |
DaemonSet指標 |
用於實時視覺化展示DaemonSet的指標資訊,包括CPU Limit使用率、記憶體Limit使用率等。 |
1-叢集級監控實踐
在K8s迭代了數十個版本後,叢集本身的穩定性一般不需要關心,絕大部分情況下,都是使用的不合理影響了叢集的穩定性。通常情況下,叢集級別監控只需要關注叢集中執行的應用數量變化以及相關的水位變化。這裡最常見的是使用《資源總覽》、《水位監控》和《執行時監控》。其中
- 資源總覽中能夠檢視每個資源的總數以及和前一天相比的變化情況,用來監控是否有一些快速變化的資源出現
- 水位監控中主要顯示叢集中能夠申請的Pod、CPU、記憶體資源以及當前的申請率資訊,防止到達水位上限
- 執行時監控中主要顯示叢集中的Deployment、StatefullSet、Pod、Container的變化情況
2-系統元件監控實踐
同樣,K8s的系統元件監控,通常只需要關心其中使用部分的不合理即可,因此只需要檢視其中APIServer和ETCD的部分,防止有非常多的額外資源和訪問導致APIServer或ETCD請求過慢。
3-應用基礎指標監控
全棧監控預設提供了Node、Pod、Deployment、DaemonSet、StatefullSet的基礎指標監控,所有這些資源都包括列表的Overview指標以及詳情的Detail指標,而且各個相關聯的資源還支援跳轉關係,例如:所有的列表支援跳轉到詳情的Detail指標、Node中支援關聯執行的Pod指標、Deployment/DaemonSet/StatefullSet支援跳轉關聯Pod。
4-熱點監控
熱點監控主要輔助我們快速找到“離群”的機器,防止因為部分機器成為熱點,導致該機器上應用響應變慢,以至於影響整個叢集的效能。在找到熱點機器後,還可以通過改機器的IP,跳轉到對應Node的詳細指標中,檢視熱點具體是由該節點上哪個Pod引起。
小結
本文主要關注在Kubernetes的監控方案上(如何接入可參考《
本文為阿里雲原創內容,未經允許不得轉載。