Kubernetes 自然適合分佈式的微服務應用。然而,當開發者們將應用從傳統的架構遷移到 Kubernetes 之後,會發現分佈式的應用依舊存在各類各樣的問題,例如大量微服務間的調用關係複雜、系統耗時或瓶頸難以排查、服務異常定位困難等一系列應用性能管理問題,而 APM 正是實時監控並管理微服務應用性能的利器。git
APM 無疑是在大規模的微服務開發與運維場景下是必不可少的一環,APM 須要主要從這三個角度去解決三大場景問題:github
社區擁有很豐富的 APM 解決方案,好比著名的 Pinpoint、Zipkin、SkyWalking、CAT 等。在通過一番調研後,KubeSphere 選擇將 Apache SkyWalking 做爲面向 Kubernetes 的 APM 開源解決方案,將 Apache SkyWalking 集成到了 KubeSphere 容器平臺,做爲應用模板在 KubeSphere 應用商店 提供給用戶一鍵部署至 Kubernetes 的能力,進一步加強在微服務應用維度的可觀察性。web
Apache SkyWalking 在 2019 年 4 月 17 正式成爲 Apache 頂級項目,提供分佈式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。Apache SkyWalking 專爲微服務、雲原生和基於容器的架構而設計。這是 KubeSphere 選擇 Apache SkyWalking 的主要緣由。spring
而且,Apache SkyWalking 自己還具備不少優點,包括多語言自動探針,好比 Java、.NET Core 和 Node.JS,可以實現無侵入式的探針接入 APM 檢測,輕量高效,多種後端存儲支持,提供鏈路拓撲與 Tracing 等優秀的可視化方案,模塊化,提供 UI、存儲、集羣管理多種機制可選,而且支持告警。同時,Apache SkyWalking 還很容易與 SpringCloud 應用進行集成。apache
Apache SkyWalking 架構圖以下,關於詳細的架構介紹,你們能夠在 Apache SkyWalking https://skywalking.apache.org/
官網找到。後端
接下來咱們經過一個完整的示例演示在 KubeSphere 部署 Apache SkyWalking 至 Kubernetes,並接入一個 SpringCloud 示例應用,在 Apache Skywalking 的 Dashboard 展現 APM 效果。瀏覽器
首先,下載 Apache SkyWalking 的 Helm Chart,而後經過 KubeSphere 將 Chart 上傳至應用商店,這部分的步驟能夠參考 KubeSphere 官方文檔(kubesphere.io/docs),本文再也不贅述。安全
KubeSphere 提供了基於 Helm 完整的應用生命週期管理的能力,應用經過審覈後便可上架,並提供給平臺全部用戶一鍵部署至 Kubernetes 的選項。微信
提示:咱們對 Apache SkyWalking 的 Helm Chart(6.5.0),針對 Helm 2 做了適配,能夠在
https://github.com/kubesphere/helm-charts
獲取 Chart 文件。網絡
咱們能夠在應用商店訪問 Apache SkyWalking,點擊 Deploy 並選擇企業空間與項目,取消項目的 CPU 與 Request Limit,便可快速部署 Apache SkyWalking 至 Kubernetes。
下面,咱們在 KubeSphere Console 查看 SkyWalking 的應用與 Workload 運行狀態。
Application
Deployments
Statefulsets
當咱們在 Application 與 Workloads 列表下,看到應用狀態顯示 active 而且 SkyWalking 資源都顯示 Running,說明 SkyWalking 部署成功。接下來,能夠在 Service 列表中,將 SkyWalking UI 服務的外網訪問類型設置爲 NodePort,便可在瀏覽器經過 http://IP:NodePort
訪問 SkyWalking Dashboard。
提示:若您的 KubeSphere 是部署在雲上或物理機,能夠藉助 LoadBalancer 插件以 LoadBalancer 類型去暴露服務至集羣外部。
Services
在本文中,咱們準備了一個簡單的 SpringCloud 示例應用,使用 Apache SkyWalking 官方的鏡像(apache/skywalking-base:6.5.0),爲 SpringCloud 微服務以 initContainer 的方式注入 Agent 到容器中。這也正是 SkyWalking Agent 巧妙之處,無需侵入代碼或對原有的業務鏡像改造,就能快速接入 APM。
首先,經過 Git 將 SpringCloud 示例應用的代碼拉取到本地。
git clone https://github.com/kubesphere/tutorial.git
而後進入 tutorial/tutorial 6 → skywalking/6.5.0/apm-springcloud-demo/
目錄,分別將 apm-eureka.yml 與 apm-item.yml 文件中的 Agent Collector 的後端服務地址,修改成 skywalking-oap
服務的 DNS 地址與端口。
env:
···
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: skywalk-1h6lqf-skywalking-skywalking-oap.demo:11800 # skywalking oap 後端服務地址
DNS 地址與服務端口,能夠經過 KubeSphere Console 地址獲取。
而後,咱們能夠經過 kubectl 對上述克隆過的倉庫 apm-springcloud-demo 目錄下,經過 kubectl 快速部署應用,指定 namespace 爲 KubeSphere 上的 demo 項目。
$ kubectl apply -f apm-springcloud-demo -n demo
deployment.apps/apm-eureka created
deployment.apps/apm-item created
service/apm-eureka created
service/apm-item created
此時在 KubeSphere 能夠看到,示例應用的工做負載 apm-eureka 與 apm-item 都已經成功運行。
接下來,只須要對其中一個服務 apm-item 發送一些測試請求模擬用戶訪問流量,就能夠訪問 SkyWalking 查看數據效果的展現了。
在上述 yaml 文件中,咱們已對 SpringCloud 示例應用以 initContainer 的方式注入了 Agent,所以能夠直接在 SkyWalking 的 Service Dashboard 查看鏈路效果與拓撲關係。能夠在右下角將時間範圍稍做調整,刷新後就能夠看到兩個示例服務的 Global Heatmap、Global Response Time、Global Top Throughput 以及 Global Top Slow Endpoints。
切換 Service,能夠看到一些服務相關的信息,如平均響應時間、平均吞吐量、平均時延統計、SLA 等監控圖表。
在 Endpoints 與 Instance,還有很是豐富的端點與 JVM 相關的應用指標,對 Java 類應用很是友好。
點擊上邊欄的 Topology,能夠看到當前的示例應用的多個服務依賴拓撲關係。服務拓撲一目瞭然,代碼再複雜也不怕了。
點擊 Trace,能夠看到服務間的 Tracing 情況。左邊是當前全部的訪問請求,任意選擇一項,能夠在右邊看到一個詳細的鏈路追蹤過程與 Span 信息:
選擇任意一個 Span,在左側能夠看到 Span 詳情,快速查看 Endpoint、http.method、status_code 的信息。
Apache SkyWalking 還支持告警與 Metrics 對比,咱們不在本文中一一贅述,感興趣的同窗能夠參考 SkyWalking 官方文檔深刻研究。
本文在基於 Kubernetes 的微服務場景下,藉助 KubeSphere 容器平臺與 Apache SkyWalking 這兩大開源工具,經過一個完整的 SpringCloud 示例應用,演示瞭如何開啓 APM,爲業務的可持續運營保駕護航。
爲了讓你們更深刻了解開源治理與開源文化,咱們專門邀請到了 Apache SkyWalking Founder 吳晟老師,爲你們帶來以 開源治理 爲主題的線上直播分享活動,有機會與吳晟老師在直播中提問互動,參與分享可掃描二維碼獲取連接,在 Web 端或移動端撥入。
KubeSphere 是在 Kubernetes 之上構建的以應用爲中心的開源容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工做流。KubeSphere 提供了運維友好的嚮導式操做界面,包括 Kubernetes 資源管理、DevOps (CI/CD)、應用生命週期管理、微服務治理 (Service Mesh)、多租戶管理、監控日誌、告警通知、存儲與網絡管理、GPU support 等功能,幫助企業快速構建一個強大和功能豐富的容器雲平臺。
本文分享自微信公衆號 - KubeSphere()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。