Kubernetes是一個開源的容器編排框架,它爲咱們提供了一種簡單的部署、擴展和監控的方法。本文將討論Kubernetes的內置監控功能,如Kubernetes dashboard、cAdvisor等。爲便於更好地理解,文內還提供了演示。node
介 紹json
Kubernetes是一個開源的容器編排框架,它爲咱們提供了一種簡單的部署、擴展和監控的方法。在本文中,咱們將討論Kubernetes的內置監控功能。爲了便於讀者更好地理解,本文包含了一些演示。api
Kubernetes架構概述瀏覽器
在基礎架構級別,Kubernetes集羣是一組各自發揮特定功能的物理機或虛擬機。充當主要角色的物理機或虛擬機負責整個操做,並協調在全部node上運行的容器管理。緩存
Master組件管理pod的生命週期:服務器
Node組件是Kubernetes中由master管理的worker機器。每一個node都包含運行pod所需的必要組件:網絡
從邏輯角度看,一個Kubernetes部署,是由在集羣中各自發揮做用的各個組件組成:架構
監控Kubernetes併發
若咱們想要預測問題並發現開發或部署中潛在的瓶頸,那麼對應用程序進行監控是必不可少的。負載均衡
爲了幫助監控集羣和構成部署的許多活動組件,Kubernetes提供了一些內置的監控功能:
在本文中,咱們將重點介紹前兩個內置工具。在本系列文章的下一篇中,咱們將介紹其餘的監控工具。
Kubernetes中有許多指標須要監控。正如咱們會以兩種不一樣的方式(基礎架構和邏輯)描述架構那樣,咱們也能夠將監控分爲兩個主要組件:監控集羣自己以及集羣上運行的工做負載監控。
集羣監控
全部集羣都應監控底層服務器組件,由於服務器層的問題每每都會出如今工做負載中。監控node資源時要注意的一些指標包括CPU、磁盤和網絡帶寬。瞭解這些指標可讓咱們知道是否須要對集羣進行擴容或縮容(若是企業使用的是雲提供商,對運行成本很看重,那麼這一點更尤爲重要)。
工做負載監控
咱們還須要考慮與部署及其pod相關的指標。其中重要的一點,是將deployment中當下運行的pod數量與指望的數量進行對比。此外,咱們還應當注意健康檢查、容器指標以及最終的應用指標。
前期準備
在如下部分中,咱們將以demo的形式逐一介紹列出的內置監控功能,爲此咱們須要作的前期準備有:
啓動Rancher實例
第一步,啓動Rancher實例。Rancher有一份很是直觀的入門指南可供參考:https://rancher.com/quick-start/
使用Rancher部署GKE集羣
按照操做指南,使用Rancher設置和配置Kubernetes集羣:
https://rancher.com/docs/ranc...
注意:請確保已啓用Kubernetes Dashboard,咱們這裏使用的Kubernetes 版本爲v.1.10。
圖1 使用Rancher建立Kubernetes集羣
Kubernetes Dashboard
Kubernetes dashboard是基於Web的Kubernetes用戶界面,咱們可使用它來對應用程序進行故障排除並管理集羣資源。
而Rancher,能幫助用戶一鍵安裝dashboard。dashboard的主要用途包括:
要訪問dashboard,咱們須要在咱們的計算機和Kubernetes API服務器之間代理請求。輸入如下代碼便可使用kubectl啓動代理服務器:
代理服務器將在後臺啓動,輸出相似於下文的內容:
如今,要查看dashboard,請經過瀏覽器訪問如下地址:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
而後,咱們須要在登陸頁面輸入相應的憑據:
圖2 Dashboard登陸
下面咱們未來了解如何使用服務賬戶機制,建立具備管理員權限的用戶。咱們將使用兩個YAML文件。
一個YAML文件用於建立服務賬戶:
另外一個YAML文件將爲咱們的用戶建立ClusterRoleBinding:
應用兩個YAML文件,來建立其定義的對象:
建立用戶並設置了正確的權限後,咱們須要找到令牌才能登陸:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
在Kubernetes dashboard憑據提示中選擇「Token(令牌)」,而後在字段中輸入你在上面檢索的值以進行身份驗證。
Kubernetes Dashboard包含幾個主要視圖:
在沒有任何工做負載運行的狀況下,dashboard頁面將爲空,由於此時在Kubernetes上不會部署任何內容。若是要瀏覽 dashboard提供的全部視圖,最佳選擇是部署使用不一樣工做負載類型的應用程序(StatefulSet、部署、副本集等)。這篇如何在Kubernetes上部署Redis的文章就是一個很好的示例,它展現了部署一個Redis集羣(具備卷聲明和configMaps的有狀態集)和一個測試應用程序(一個Kubernetes部署)時,dashboard會如何顯示相關信息。
配置完工做負載後,咱們能夠關閉一個node,而後檢查不一樣的選項卡,以查看一些更新:
圖3 Stateful Set的dashboard頁面
圖4 Pod的dashboard頁面
cAdvisor
cAdvisor是一個集成到kubelet二進制文件中的開源代理,主要用於監控資源使用狀況並分析容器的性能。cAdvisor會收集關於在給定node上運行的全部容器的CPU、內存、文件和網絡使用狀況的統計信息(cAdvisor不在pod層運行)。除核心指標外,cAdvisor還會監控事件。用戶可使用諸如kubectl top之類的命令直接訪問指標,也可使用調度程序執行調度層的指標(例如使用autoscaling)。
須要注意的是,cAdvisor不會長期存儲某些指標,所以若是須要使用該功能,則應尋找專用的監控工具。
從Kubernetes版本1.10起,cAdvisor的UI已經差很少被棄用了,Kubernetes 1.12版本以後cAdvisor的UI會被完全刪除。Rancher可讓你選擇用於集羣的Kubernetes版本。在爲此演示設置基礎架構時,咱們將集羣配置爲使用版本1.10,所以咱們仍然能夠訪問cAdvisor UI。
要訪問cAdvisor UI,咱們須要在咱們的計算機和Kubernetes API服務器之間進行代理。輸入如下命令啓動代理服務器的本地實例:
接下來,找到node的名稱:
你能夠經過如下地址在瀏覽器中查看UI,將node名稱替換爲你在命令行中找到的標識符:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:4194/proxy/containers/
圖5 初始cAdvisor UI
圖6 cAdvisor UI概述和流程
爲了確認kubelet正在監聽端口4194,你能夠登陸到node查看更多信息:
咱們能夠確認,在咱們的Kubernetes版本中,kubelet進程經過該端口提供cAdvisor Web UI:
若是你運行的Kubernetes版本爲1.12或更高,由於cAdvisorUI已被刪除,所以kubelet不會再監聽4194端口了。你可使用上面的命令進行確認。不過,因爲cAdvisor是kubelet二進制文件的一部分,所以相關指標仍然存在。
kubelet二進制文件使用Prometheus展現格式公開了全部runtime和cAdvisor指標:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5/proxy/metrics/cadvisor
圖7 cAdvisor指標端點
在一大堆輸出中,你能夠重點查找和關注的指標有:
CPU:
內存:
磁盤:
網絡:
一些其餘有用的指標:
例如,要查看cAdvisor MachineInfo(),咱們能夠訪問:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:10255/proxy/spec/
圖8 cAdvisor規範端點
pod端點爲node上運行的pod提供與kubectl get pods -o json相同的輸出:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:10255/proxy/pods/
圖9 cAdvisor pod端點
一樣,也能夠經過訪問如下連接來獲取日誌:
http://localhost:8001/logs/kube-apiserver.log
結 語
監控的重要性不言而喻,它讓咱們能充分了解到應用程序的情況。Kubernetes有不少內置工具可供用戶們選擇,讓你們更好地對基礎架構層(node)和邏輯層(pod)有充分的瞭解。
在本文中,咱們重點關注了專爲用戶提供監控和指標的工具。在本系列文章的下一篇中,咱們將繼續分享那些關注工做負載擴縮容和生命週期管理的監控工具,敬請期待。