使用Netsil监控Kubernetes上的微服务
ubernetes是容器編排和調(diào)度領(lǐng)域的王者,它擊敗了競爭對手Docker Swarm和Apache?Mesos,開啟了閃耀的未來,微服務可以自修復,可以自動擴展,可以跨zone,region甚至跨云供應商進行federate。在這樣的云原生應用程序的新紀元里,能夠以簡單的方式洞察服務之間是如何交互的變得日益重要——這可和大海撈針般大范圍尋找導致性能問題的某個特定的原因是不一樣的。
我們花了些時間研究Netsil并且將其解決方案打包成原生的Kubernetes Deployment。Netsil的應用程序,Application Operations Center (AOC,應用運維中心),幫助用戶觀察并且收集跨Kubernetes集群運行的微服務應用程序的分析數(shù)據(jù)。服務本身是不可知的,因為它在網(wǎng)絡(luò)上才能決定其實際上如何運行。隨著時間的推移,并且實時地,它學習并且發(fā)現(xiàn)用戶的環(huán)境,幫助用戶逐漸搭建出SLA指標器,警報器等等。
開始吧
首先你需要一個Kubernetes集群。我使用Stackpoint.io快速創(chuàng)建一個集群。在任意主流供應商,比如AWS,GCE或者Azure上創(chuàng)建一個集群。需要確保為你的主節(jié)點選擇足夠大的配置——這是所有收集器會將數(shù)據(jù)發(fā)送這里,在網(wǎng)絡(luò),處理器和內(nèi)存上都可能消耗比較大。worker節(jié)點可以是任何配置,只要能夠滿足微服務應用程序的需求。在我的示例里,使用了較大的實例配置,因為我會將多種服務都推送到這個環(huán)境里。
在我們的示例里,使用3個N1標準4的實例構(gòu)建了一個集群,這些實例通過HAProxy Ingress Controller暴露出去,它是自發(fā)現(xiàn)的,并且在部署它們時注冊了AOC服務。我們能夠使用集群的公開VIP訪問AOC儀表盤。
開始前
在僅僅運行了Kubernetes服務的空空的集群上再安裝一些服務,這里使用Sock Shop,這是由Weaveworks開發(fā)的微服務參考程序。這樣有助于模擬一個真實的環(huán)境。Sock Shop使用了14個不同的服務,這是很多企業(yè)的應用程序會達到的復雜度。現(xiàn)在將AOC添加到我們的環(huán)境里。
這里有關(guān)于Sock Shop的詳細信息。將其推送到環(huán)境里很簡單,僅僅需要在克隆了repo后運行如下命令即可:
kubectl?apply?-f?deploy/kubernetes/manifests 然后檢查Pod是否已經(jīng)在線了:
$?kubectl?get?pods?--namespace=default NAME?READY?STATUS?RESTARTS?AGE cart-3694116665-eccpp?1/1?Running?0?55m cart-db-2305146297-u30g8?1/1?Running?0?55m catalogue-11453786-lkslj?1/1?Running?0?55m catalogue-db-393939662-bn7uc?1/1?Running?0?55m front-end-3820830240–01e6t?1/1?Running?0?55m orders-3498886496-z8jun?1/1?Running?0?55m orders-db-1775353731-u7dmf?1/1?Running?0?55m payment-3012088042-vbfhw?1/1?Running?0?55m queue-master-936560853-ocmxi?1/1?Running?0?55m rabbitmq-1897447621–2ij04?1/1?Running?0?55m shipping-1232389217-b278a?1/1?Running?0?55m spc-balancer-biilo?1/1?Running?0?1h user-3090014237–196pv?1/1?Running?0?55m user-db-1338754314-exyou?1/1?Running?0?55m 開始觀察吧
我們已經(jīng)有了運行著的Kubernetes 1.4集群,并且安裝了Sock Shop應用程序,那么開始學習環(huán)境里是什么吧。當股票購買者遇到問題時我們是否能知道呢?
在部署AOC之前需要在所有主機上運行如下命令。該命令幫助避免一個已知的Flannel和kube-proxy的競爭問題。
iptables?-t?nat?-I?POSTROUTING?-o?flannel.1?-s?host-private-ip?-j?MASQUERADE 使用每臺主機的私有IP替換host-private-ip。完成后,從GitHub克隆AOC Kubernetes repo:
git?clone?https://github.com/netsil/netsil-kube.git 并且使用如下單個命令將其推送到Kubernetes里:
kubectl?apply?-f?netsil.yml 確保Pod和Service已經(jīng)在線了。AOC容器可能需要一些時間,但是收集器會被啟動并且隊列里的數(shù)據(jù)會被推送進來,因為它們已經(jīng)開始發(fā)現(xiàn)你的環(huán)境了。
$?kubectl?get?po,svc?—?namespace=netsil NAME?READY?STATUS?RESTARTS?AGE collector-7wpaa?1/1?Running?0?1h collector-9o6k4?1/1?Running?0?1h collector-rzekv?1/1?Running?0?4m netsil-vjf5f?1/1?Running?0?1h NAME?CLUSTER-IP?EXTERNAL-IP?PORT(S)?AGE netsil?10.200.126.143?<nodes>?443/TCP,2001/TCP,2003/TCP,2003/UDP?1h AOC拓撲有兩個主要組件。第一個是作為帶有單個副本的Replication Controller的一部分運行的Pod。它運行AOC儀表盤和數(shù)據(jù)收集的平臺。第二個組件是AOC收集器的DaemonSet。它告訴Kubernetes在環(huán)境的所有節(jié)點上運行一個帶有收集器容器的Pod。這些收集器配置為向AOC Pod發(fā)送信息。
生成流量
我們將使用Sock Shop的更多工具來模擬網(wǎng)站上的購物行為。這讓我們能看到AOC是如何學習流量模式以及我們的通用拓撲的。
你需要知道Sock Shop監(jiān)聽以及運行的前端IP地址和端口:
docker?run?weaveworksdemos/load-test?-h?$frontend-ip[:$port]?-r?100?-c?2 隨著load-test的運行,可以開始看到AOC隨著數(shù)據(jù)的獲得被點亮了:
因為AOC作為DaemonSet部署,如果任意Pod銷毀了并且在其他地方重新調(diào)度,AOC能夠繼續(xù)觀測到拓撲,隨著Kubernetes的變化而變化。
我很喜歡AOC的一個原因是部署通過服務來組織,并且我能夠?qū)崟r地觀察到環(huán)境,并且開始深入不同的度量,為了那些可能影響到客戶的事情搭建服務級別的警報。因此,當環(huán)境像下圖一樣變紅時,我能夠獲得警報,知道某個服務處在緊急狀態(tài),比如Sock Shop里的信用卡和地址端點。
?
?
我甚至還可以深入儀表盤,知道承受最大壓力的Pod和容器是什么。在本示例里,網(wǎng)絡(luò)壓力最大的容器是flannel Pod。這讓我們能夠了解最繁忙的服務是哪個,能夠幫助我們重新思考配置或者Kubernetes里分發(fā)部署的方式。
總結(jié)
Netsil的AOC是非常棒的工具,可以幫助用戶實時觀察環(huán)境,隨著使用模式的變化而更新。用戶可以挖掘歷史數(shù)據(jù)并且添加警報。應用程序隨著添加更多的節(jié)點會自動擴展,新節(jié)點上線后就會在上面啟動一個收集器,這樣用戶能夠得到節(jié)點從上線到銷毀的所有數(shù)據(jù)。
如果想在自己的Kubernetes環(huán)境里使用Application Operations Center,只需要下載這里的manifests就可以了。可以在http://netsil.com學習Netsil和Application Operations Center。
轉(zhuǎn)載于:https://www.cnblogs.com/nongchaoer/p/6283857.html
總結(jié)
以上是生活随笔為你收集整理的使用Netsil监控Kubernetes上的微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惊弓之鸟的作者是谁啊?
- 下一篇: 今日黄金多少钱啊?