您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么使用Netsil監控Kubernetes上的微服務,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Kubernetes是容器編排和調度領域的王者,它擊敗了競爭對手Docker Swarm和Apache Mesos,開啟了閃耀的未來,微服務可以自修復,可以自動擴展,可以跨zone,region甚至跨云供應商進行federate。在這樣的云原生應用程序的新紀元里,能夠以簡單的方式洞察服務之間是如何交互的變得日益重要——這可和大海撈針般大范圍尋找導致性能問題的某個特定的原因是不一樣的。
我們花了些時間研究Netsil并且將其解決方案打包成原生的Kubernetes Deployment。Netsil的應用程序,Application Operations Center (AOC,應用運維中心),幫助用戶觀察并且收集跨Kubernetes集群運行的微服務應用程序的分析數據。服務本身是不可知的,因為它在網絡上才能決定其實際上如何運行。隨著時間的推移,并且實時地,它學習并且發現用戶的環境,幫助用戶逐漸搭建出SLA指標器,警報器等等。
首先你需要一個Kubernetes集群。我使用Stackpoint.io快速創建一個集群。在任意主流供應商,比如AWS,GCE或者Azure上創建一個集群。需要確保為你的主節點選擇足夠大的配置——這是所有收集器會將數據發送這里,在網絡,處理器和內存上都可能消耗比較大。worker節點可以是任何配置,只要能夠滿足微服務應用程序的需求。在我的示例里,使用了較大的實例配置,因為我會將多種服務都推送到這個環境里。
在我們的示例里,使用3個N1標準4的實例構建了一個集群,這些實例通過HAProxy Ingress Controller暴露出去,它是自發現的,并且在部署它們時注冊了AOC服務。我們能夠使用集群的公開VIP訪問AOC儀表盤。
在僅僅運行了Kubernetes服務的空空的集群上再安裝一些服務,這里使用Sock Shop,這是由Weaveworks開發的微服務參考程序。這樣有助于模擬一個真實的環境。Sock Shop使用了14個不同的服務,這是很多企業的應用程序會達到的復雜度。現在將AOC添加到我們的環境里。
這里有關于Sock Shop的詳細信息。將其推送到環境里很簡單,僅僅需要在克隆了repo后運行如下命令即可:
kubectl apply -f deploy/kubernetes/manifests
然后檢查Pod是否已經在線了:
$ 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
我們已經有了運行著的Kubernetes 1.4集群,并且安裝了Sock Shop應用程序,那么開始學習環境里是什么吧。當股票購買者遇到問題時我們是否能知道呢?
在部署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已經在線了。AOC容器可能需要一些時間,但是收集器會被啟動并且隊列里的數據會被推送進來,因為它們已經開始發現你的環境了。
$ 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 443/TCP,2001/TCP,2003/TCP,2003/UDP 1h
AOC拓撲有兩個主要組件。第一個是作為帶有單個副本的Replication Controller的一部分運行的Pod。它運行AOC儀表盤和數據收集的平臺。第二個組件是AOC收集器的DaemonSet。它告訴Kubernetes在環境的所有節點上運行一個帶有收集器容器的Pod。這些收集器配置為向AOC Pod發送信息。
我們將使用Sock Shop的更多工具來模擬網站上的購物行為。這讓我們能看到AOC是如何學習流量模式以及我們的通用拓撲的。
你需要知道Sock Shop監聽以及運行的前端IP地址和端口:
docker run weaveworksdemos/load-test -h $frontend-ip[:$port] -r 100 -c 2
隨著load-test的運行,可以開始看到AOC隨著數據的獲得被點亮了:
因為AOC作為DaemonSet部署,如果任意Pod銷毀了并且在其他地方重新調度,AOC能夠繼續觀測到拓撲,隨著Kubernetes的變化而變化。
我很喜歡AOC的一個原因是部署通過服務來組織,并且我能夠實時地觀察到環境,并且開始深入不同的度量,為了那些可能影響到客戶的事情搭建服務級別的警報。因此,當環境像下圖一樣變紅時,我能夠獲得警報,知道某個服務處在緊急狀態,比如Sock Shop里的信用卡和地址端點。
我甚至還可以深入儀表盤,知道承受最大壓力的Pod和容器是什么。在本示例里,網絡壓力最大的容器是flannel Pod。這讓我們能夠了解最繁忙的服務是哪個,能夠幫助我們重新思考配置或者Kubernetes里分發部署的方式。
Netsil的AOC是非常棒的工具,可以幫助用戶實時觀察環境,隨著使用模式的變化而更新。用戶可以挖掘歷史數據并且添加警報。應用程序隨著添加更多的節點會自動擴展,新節點上線后就會在上面啟動一個收集器,這樣用戶能夠得到節點從上線到銷毀的所有數據。
關于怎么使用Netsil監控Kubernetes上的微服務就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。