Kubernetes是容器編排和調度領域的王者,它擊敗了競爭對手Docker Swarm和Apache Mesos,開啓了閃耀的將來,微服務能夠自修復,能夠自動擴展,能夠跨zone,region甚至跨雲供應商進行federate。在這樣的雲原生應用程序的新紀元裏,可以以簡單的方式洞察服務之間是如何交互的變得日益重要——這可和大海撈針般大範圍尋找致使性能問題的某個特定的緣由是不同的。
咱們花了些時間研究Netsil而且將其解決方案打包成原生的Kubernetes Deployment。Netsil的應用程序,Application Operations Center (AOC,應用運維中心),幫助用戶觀察而且收集跨Kubernetes集羣運行的微服務應用程序的分析數據。服務自己是不可知的,由於它在網絡上才能決定其實際上如何運行。隨着時間的推移,而且實時地,它學習而且發現用戶的環境,幫助用戶逐漸搭建出SLA指標器,警報器等等。html
首先你須要一個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後運行以下命令便可:git
kubectl apply -f deploy/kubernetes/manifests
而後檢查Pod是否已經在線了:github
$ 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的競爭問題。docker
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裏:app
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發送信息。frontend
咱們將使用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是很是棒的工具,能夠幫助用戶實時觀察環境,隨着使用模式的變化而更新。用戶能夠挖掘歷史數據而且添加警報。應用程序隨着添加更多的節點會自動擴展,新節點上線後就會在上面啓動一個收集器,這樣用戶可以獲得節點從上線到銷燬的全部數據。
若是想在本身的Kubernetes環境裏使用Application Operations Center,只須要下載這裏的manifests就能夠了。能夠在http://netsil.com學習Netsil和Application Operations Center。