歡迎光臨
每天分享高質量文章

監控Kubernetes——挑戰和資料源

我們的行業長時間都一直依賴於微服務架構去快速安全的交付軟體。而微服務的出現為容器技術的出現鋪平了道路,使得我們重新構思如何去構建和交付應用程式。Docker在2013年突然進入大家的視野,這對致力於基礎設施現代化以及雲遷移的公司來說,像Docker這樣的工具對於快速、大規模交付應用程式變得尤其重要。 
但是,快速發展的同時也帶了挑戰——容器在進入編排時也帶來了不小的複雜性。直到引入Kubernetes:一個開源容器編排系統,它可以自動化部署,自動擴縮容並且可以進行容器化應用管理。Kubernetes控制面板是控制和管理你的基礎設施的。Kubernetes最初由谷歌於2014年推出,現在由雲原生計算基金會(CNCF)維護(順便提一下,谷歌幫助組建了Kubernetes,以確保它保持自由和有競爭力)。如果您使用Docker來容器化您的應用的話,那麼使用Kubernetes來作為容器編排是自然而然的(當然還有有其他的編排器,例如Docker Swarm和Apache Mesos,但是Kubernetes已經成為了容器編排的霸主,並且我認為在以後也不會發生任何改變)。
在這系列文章的第一部分,我主要涵蓋了Kubernetes監控帶來的挑戰和主要的監控資料源。隨後,我會深入講解Kubernetes的監控以及Docker的部署,下麵帶來的實戰將會概述資料源。


Kubernetes監控:挑戰

Kubernetes使得團隊更容易去管理他們的容器——在自動維護所需要的狀態的同時調度和供應它們。Kubernetes核心的價值是作為一個公共平臺來服務,它可以將你的應用部署在任何他們可以運行的地方,無論是AWS,GCP,Azure或者是裸機上。當然也必須強調一點,它提供強大的功能與自動化也帶來了很多挑戰,特別是在性能監控上。無論部署的規模如何,你都需要知道在部署中有多少可用資源,也需要瞭解你部署的應用和容器的健康狀態。就像是微服務讓我們思考瞭如何去構建我們的應用,Kubernetes要求我們改變傳統的監控方式——容器編排的動態特征要求隨後採用動態方法進行監控。
下列是我所見到的挑戰:
  • 在這個全新的動態特征領域,你的應用程式不斷地在移動。

  • 在Kubernetes之前,您只是通過跨雲平臺(公有和私有,以及不同的雲服務商)來分佈式部署應用程式。現在您可以更簡單來進行分佈式部署,當然那也會有一系列新的問題。

  • 採用Kubernetes就像是將大型專案進行微服務化,意味著會有更多、更小的內容需要監控。

  • 您可能聽說過這樣一句話,”對待您的基礎設施要像對待牛而不是對待寵物一樣”。Kubernetes就像是這種牲畜方法的縮影,使其易於實現高容量和短暫的基礎設施。儘管如此,持續追蹤您的Kubernetes Pod和像容器的標簽和註釋等標識是一項關鍵任務。

Kubernetes 監控:資料源

本質上,監控工具從下列四種來源採集Kubernetes的元資料:
  • 運行Kubelet的宿主機。Kubernetes的宿主機資源是有限的,所以監控這些資源是尤其重要的。有許許多多種方法來獲取宿主機的信息,但是最常用的使用Prometheus出口節點[1]來從Kubernetes宿主機中提取資料,併在HTTP端點上公開系統資源遙測資料(例如CPU使用量以及記憶體)。

  • Kubernetes行程,AKA Kubelet指標。包括apiserver,kube-scheduler和kube-controller-manager(kube控制管理器)。這些可以提供給您Kubernetes節點的詳細資料以及節點運行的任務。

  • Kubelet內置的cAdvisor。這裡[2]做了一個很好的總結,但實際上Kubelet附帶了對cAdvisor的支持,它可以收集、集合、處理以及輸出您容器的運行指標。cAdvisor(它本身也支持Docker容器)提供給您每個容器的使用情況,持續追蹤資源隔離引數和歷史資源使用情況。因為Kubernetes控制面板可以分配使用記憶體,並利用cAdvisor進行跟蹤。

  • kube-state-metrics可以給您提供集群級別的信息——從全域性的視角來告訴您Kubernetes集群發生了什麼,例如您配置過的所有Pod當前的狀態。kube-state-metrics會權衡所有的Kubernetes服務並且收集他們當前的狀態信息,例如當前有多少容器在運行、其中有多少正處於某種特殊狀態,也會提供他們當前是否處於不健康的狀態或是處於可用狀態等。從這個README檔案[3]可知,kube-state-metrics“監聽Kubernetes API server的狀況”。

接下來:容器狀態和使用Prometheus進行資料採集

如果你在家進行監控的話,你可能已經註意使用Prometheus可以監控上述四種資料源,你也會註意到我們僅僅只是在討論Kubernetes監控[4]而沒有討論運行在Kubernetes上的應用(這可能和你聽到的關於Kubernetes監控的一切都是一致的)。在我下篇文章中,我會講述使用Prometheus進行Kubernetes和Docker監控,討論為什麼它能夠那麼好的契合Kubernetes生態圈以及它的不足之處。
相關鏈接:
  1. https://github.com/prometheus/node_exporter

  2. https://medium.com/jorgeacetozi/kubernetes-node-components-service-proxy-kubelet-and-cadvisor-dcc6928ef58c

  3. https://github.com/kubernetes/kube-state-metrics

  4. https://sensu.io/solutions/container-monitoring

原文鏈接:https://www.cncf.io/blog/2019/01/09/monitoring-kubernetes-part-1-the-challenges-data-sources/
Kubernetes實戰培訓

Kubernetes實戰培訓將於2019年3月8日在深圳開課,3天時間帶你系統掌握Kubernetes,學習效果不好可以繼續學習本次培訓包括:雲原生介紹、微服務;Docker基礎、Docker工作原理、鏡像、網絡、儲存、資料捲、安全;Kubernetes架構、核心組件、常用物件、網絡、儲存、認證、服務發現、調度和服務質量保證、日誌、監控、告警、Helm、實踐案例等。