使用Netsil监控Kubernetes上的微服务
ubernetes是容器編排和調(diào)度領(lǐng)域的王者,它擊敗了競爭對(duì)手Docker Swarm和Apache?Mesos,開啟了閃耀的未來,微服務(wù)可以自修復(fù),可以自動(dòng)擴(kuò)展,可以跨zone,region甚至跨云供應(yīng)商進(jìn)行federate。在這樣的云原生應(yīng)用程序的新紀(jì)元里,能夠以簡單的方式洞察服務(wù)之間是如何交互的變得日益重要——這可和大海撈針般大范圍尋找導(dǎo)致性能問題的某個(gè)特定的原因是不一樣的。
我們花了些時(shí)間研究Netsil并且將其解決方案打包成原生的Kubernetes Deployment。Netsil的應(yīng)用程序,Application Operations Center (AOC,應(yīng)用運(yùn)維中心),幫助用戶觀察并且收集跨Kubernetes集群運(yùn)行的微服務(wù)應(yīng)用程序的分析數(shù)據(jù)。服務(wù)本身是不可知的,因?yàn)樗诰W(wǎng)絡(luò)上才能決定其實(shí)際上如何運(yùn)行。隨著時(shí)間的推移,并且實(shí)時(shí)地,它學(xué)習(xí)并且發(fā)現(xiàn)用戶的環(huán)境,幫助用戶逐漸搭建出SLA指標(biāo)器,警報(bào)器等等。
開始吧
首先你需要一個(gè)Kubernetes集群。我使用Stackpoint.io快速創(chuàng)建一個(gè)集群。在任意主流供應(yīng)商,比如AWS,GCE或者Azure上創(chuàng)建一個(gè)集群。需要確保為你的主節(jié)點(diǎn)選擇足夠大的配置——這是所有收集器會(huì)將數(shù)據(jù)發(fā)送這里,在網(wǎng)絡(luò),處理器和內(nèi)存上都可能消耗比較大。worker節(jié)點(diǎn)可以是任何配置,只要能夠滿足微服務(wù)應(yīng)用程序的需求。在我的示例里,使用了較大的實(shí)例配置,因?yàn)槲視?huì)將多種服務(wù)都推送到這個(gè)環(huán)境里。
在我們的示例里,使用3個(gè)N1標(biāo)準(zhǔn)4的實(shí)例構(gòu)建了一個(gè)集群,這些實(shí)例通過HAProxy Ingress Controller暴露出去,它是自發(fā)現(xiàn)的,并且在部署它們時(shí)注冊(cè)了AOC服務(wù)。我們能夠使用集群的公開VIP訪問AOC儀表盤。
開始前
在僅僅運(yùn)行了Kubernetes服務(wù)的空空的集群上再安裝一些服務(wù),這里使用Sock Shop,這是由Weaveworks開發(fā)的微服務(wù)參考程序。這樣有助于模擬一個(gè)真實(shí)的環(huán)境。Sock Shop使用了14個(gè)不同的服務(wù),這是很多企業(yè)的應(yīng)用程序會(huì)達(dá)到的復(fù)雜度。現(xiàn)在將AOC添加到我們的環(huán)境里。
這里有關(guān)于Sock Shop的詳細(xì)信息。將其推送到環(huán)境里很簡單,僅僅需要在克隆了repo后運(yùn)行如下命令即可:
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)有了運(yùn)行著的Kubernetes 1.4集群,并且安裝了Sock Shop應(yīng)用程序,那么開始學(xué)習(xí)環(huán)境里是什么吧。當(dāng)股票購買者遇到問題時(shí)我們是否能知道呢?
在部署AOC之前需要在所有主機(jī)上運(yùn)行如下命令。該命令幫助避免一個(gè)已知的Flannel和kube-proxy的競爭問題。
iptables?-t?nat?-I?POSTROUTING?-o?flannel.1?-s?host-private-ip?-j?MASQUERADE 使用每臺(tái)主機(jī)的私有IP替換host-private-ip。完成后,從GitHub克隆AOC Kubernetes repo:
git?clone?https://github.com/netsil/netsil-kube.git 并且使用如下單個(gè)命令將其推送到Kubernetes里:
kubectl?apply?-f?netsil.yml 確保Pod和Service已經(jīng)在線了。AOC容器可能需要一些時(shí)間,但是收集器會(huì)被啟動(dòng)并且隊(duì)列里的數(shù)據(jù)會(huì)被推送進(jìn)來,因?yàn)樗鼈円呀?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拓?fù)溆袃蓚€(gè)主要組件。第一個(gè)是作為帶有單個(gè)副本的Replication Controller的一部分運(yùn)行的Pod。它運(yùn)行AOC儀表盤和數(shù)據(jù)收集的平臺(tái)。第二個(gè)組件是AOC收集器的DaemonSet。它告訴Kubernetes在環(huán)境的所有節(jié)點(diǎn)上運(yùn)行一個(gè)帶有收集器容器的Pod。這些收集器配置為向AOC Pod發(fā)送信息。
生成流量
我們將使用Sock Shop的更多工具來模擬網(wǎng)站上的購物行為。這讓我們能看到AOC是如何學(xué)習(xí)流量模式以及我們的通用拓?fù)涞摹?/p>
你需要知道Sock Shop監(jiān)聽以及運(yùn)行的前端IP地址和端口:
docker?run?weaveworksdemos/load-test?-h?$frontend-ip[:$port]?-r?100?-c?2 隨著load-test的運(yùn)行,可以開始看到AOC隨著數(shù)據(jù)的獲得被點(diǎn)亮了:
因?yàn)锳OC作為DaemonSet部署,如果任意Pod銷毀了并且在其他地方重新調(diào)度,AOC能夠繼續(xù)觀測(cè)到拓?fù)?#xff0c;隨著Kubernetes的變化而變化。
我很喜歡AOC的一個(gè)原因是部署通過服務(wù)來組織,并且我能夠?qū)崟r(shí)地觀察到環(huán)境,并且開始深入不同的度量,為了那些可能影響到客戶的事情搭建服務(wù)級(jí)別的警報(bào)。因此,當(dāng)環(huán)境像下圖一樣變紅時(shí),我能夠獲得警報(bào),知道某個(gè)服務(wù)處在緊急狀態(tài),比如Sock Shop里的信用卡和地址端點(diǎn)。
?
?
我甚至還可以深入儀表盤,知道承受最大壓力的Pod和容器是什么。在本示例里,網(wǎng)絡(luò)壓力最大的容器是flannel Pod。這讓我們能夠了解最繁忙的服務(wù)是哪個(gè),能夠幫助我們重新思考配置或者Kubernetes里分發(fā)部署的方式。
總結(jié)
Netsil的AOC是非常棒的工具,可以幫助用戶實(shí)時(shí)觀察環(huán)境,隨著使用模式的變化而更新。用戶可以挖掘歷史數(shù)據(jù)并且添加警報(bào)。應(yīng)用程序隨著添加更多的節(jié)點(diǎn)會(huì)自動(dòng)擴(kuò)展,新節(jié)點(diǎn)上線后就會(huì)在上面啟動(dòng)一個(gè)收集器,這樣用戶能夠得到節(jié)點(diǎn)從上線到銷毀的所有數(shù)據(jù)。
如果想在自己的Kubernetes環(huán)境里使用Application Operations Center,只需要下載這里的manifests就可以了??梢栽趆ttp://netsil.com學(xué)習(xí)Netsil和Application Operations Center。
轉(zhuǎn)載于:https://www.cnblogs.com/nongchaoer/p/6283857.html
總結(jié)
以上是生活随笔為你收集整理的使用Netsil监控Kubernetes上的微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惊弓之鸟的作者是谁啊?
- 下一篇: HTML页面加载和解析流程详细介绍