簡介:近年來,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的監控方案上(如何接入可參考《
本文爲阿里雲原創內容,未經允許不得轉載。