2020-10-28
Kubernetes的門戶-Ingress
目前Kubernetes(K8s)已經真正地占領了容器編排市場,是默認的云無關計算抽象,越來越多的企業開始將服務構建在K8s集群上。在K8s中,組件通過Service對外暴露服務,常見的包括NodePort、LoadBalancer、Ingress等。其中Ingress主要提供HTTP層(7層)路由功能,相比TCP(4層)的負載均衡具備非常多的優勢(路由規則更加靈活、支持金絲雀、藍綠、A/B Test發布模式、SSL支持、日志、監控、支持自定義擴展等),是目前K8s中HTTP/HTTPS服務的主流暴露方式。
Ingress提供的7層負載均衡具有非常強大的能力,例如:
- 會話保持:讓相同的session ID路由到同一臺后端機器,保證每個用戶的會話只在一臺機器上處理。
- 基于內容的轉發:能夠根據HTTP協議內容進行轉發,例如Host、URL甚至是PostBody等。
- 重寫請求:能夠對用戶的請求進行動態修改,非常適用于新老系統的兼容性改造。
- 加密:在負載均衡上配置SSL,提供統一的證書管理,每個服務器無需單獨維護證書。
- 健康檢查增強:可基于業務規則進行健康檢查,而不僅僅是判斷端口連通性,使健康檢查更加精確。
- 日志監控:全量7層訪問日志,能夠獲取每個請求的結果、耗時、請求大小等信息,能夠基于訪問日志監控到每個服務的質量。
Ingress日志分析與監控
原始的訪問日志記錄了網站的每個訪問請求,每個請求包括用戶地址、Host、URL、狀態碼、耗時、請求大小等多個維度的信息,基于訪問日志可以統計出不同維度下的訪問qps、成功率、延遲等黃金指標,以此實現可以針對各種維度的網站質量監控。但構建一套完整的訪問日志分析系統還是非常困難,這其中包括了很多過程和工作:采集、存儲、分析、可視化、告警等。在實施過程中最為復雜的點在于:
- 采集問題:如何保證日志采集的可靠性、性能消耗、延時問題;
- 分析:在保證分析靈活性的同時能夠保持快速的分析、查詢速度以及較低的實施成本;
- 自動化:尤其在業務規模比較大的情況下,如何智能的監控和分析各個服務的狀態是一個迫切需要的功能。
為簡化廣大用戶對于Ingress日志分析與監控的門檻,阿里云容器服務和日志服務將Ingress日志打通(官方文檔),只需要應用一個yaml資源即可完成日志采集、分析、可視化等一整套Ingress日志方案的部署。
這套系統主要包括:
?
再次升級-從1.0到2.0
?
Ingress日志分析與監控的方案已經發布2年左右,目前已經有上萬的實例使用了該方案。在長期的使用中,我們也發現了這套方案的一些限制,為了適應新時代的DevOps節奏,我們需要對方案進行整體的升級,提供更加簡單、更快速、更普惠、更智能的Ingress日志監控方案。
方案架構
為了達到高性能、低成本、快速、智能等要求,SLS和阿里云容器服務團隊聯合對Ingress日志監控方案進行了一次架構升級,正式發布了2.0版本的Ingress日志中心,日志中心包括以下幾個部分:
通過以上3層數據鏈路,實現了從原始訪問日志到預聚和的指標最后再到機器學習的異常事件整個數據的流轉,對于用戶來說,告警和監控只需要基于指標和智能巡檢的結果進行,而涉及到具體服務的問題分析可以再回到原始的訪問日志并基于SLS提供的各種SQL統計方式進行自定義的排查和分析。
?
實時預聚和
Ingress的訪問日志數量和用戶訪問成正比,在原始訪問日志上實時計算指標的開銷較大,一般不適合長時間的指標分析,并且原始日志存儲的成本較高,一般不會將日志存儲較長時間,但我們還是希望指標數據能夠盡可能長的存儲,這樣可以在分析的時候查看更長時間的數據。為此SLS專門為Ingress訪問日志定制了一套全托管指標實時預聚合的功能,能夠實時將Ingress的訪問日志聚合成指標并存儲在SLS的時序庫中,這樣所有的監控數據查詢工作都可以基于聚合后的時序數據進行,大大提升監控數據的查詢效率。
?
豐富可視化
Ingress訪問日志分析的一個重要工作是可視化系統的搭建,我們需要針對不同場景創建不同的報表以便滿足各個方面的需求,例如:
?
智能巡檢
在時序監控場景中,用戶往往先確定監控對象,并通過其歷史數據,結合業務經驗,得到不同組的閾值參數,通過各種手段(同比、環比、連續觸發幾次等)進行監控,往往一個監控對象要設計4~5條監控規則,并配置不同的參數。還有更大的問題,各個參數閾值無法快速的復用到不同的類似觀測對象中,當觀測對象的規模達到數千,甚至上萬后,傳統的配置效率底下,無法滿足在大規則時序指標數據下的監控需求。流式算法具有天然的優勢可以解決上面的問題,用戶只需要發起一個機器學習服務,模型自動拉取數據,實時訓練,實時反饋(通俗地說:“來一個點,學習一個點,檢測一個點”),在極大的降低成本的同時,實現對每一條線的單獨建模,單獨分析,單獨模型參數保存,實現時序異常檢測的“千線千面”。
智能HPA
?
基于業務訪問量的HPA
HPA(Horizontal Pod Autoscaler)是Kubernetes提供的一個標準組件,用于POD的橫向自動擴縮容,例如:當Pod CPU、內存等指標上升到一定程度時會自動擴容,當這些指標下去后會自動縮容。這樣能夠保證在用戶體驗不變的情況下集群整體的資源使用都能處于一個較低的位置。
默認的HPA只能針對集群的一些標準指標(CPU、內存、網絡等)進行擴容,這種擴容方式相對靜態,而且反應不出業務的情況。因此我們對HPA進行了一些擴展,支持按照Ingress訪問QPS進行擴容。即可以設置某個Service下的Pod限定能夠處理的QPS,當QPS上升到一定高度時會自動擴容一些Pod/節點,當QPS下降時會自動縮容一些Pod/節點。
?
基于業務量預測的HPA
HPA的預測原理是判斷某些指標的值進行擴縮容,而指標的值相對來說都有10-30秒左右的延遲,并且還有幾次的double check時間,因此從壓力上升到擴容的時間基本上在2-3分鐘左右,如果Pod啟動還需要預熱的話可能要更久,這段期間用戶的訪問請求很可能會出現高延遲或錯誤的情況。
因此最好的方式是我們能夠提前知道未來幾分鐘的訪問請求量,當我們發現未來訪問請求會很高的時候,提前把Pod擴容出來并進行預熱,這樣可以在請求真正提升時Pod的資源已經提前分配好。為此我們結合SLS與阿里云達摩院聯合研發的多模型預測算法,實時預測Ingress上每個服務的訪問請求,并把這些預測的指標提供給HPA做動態擴容,能夠在請求量即將超過閾值的時候提前擴出Pod/節點,保證用戶訪問一直流暢。
?
總結
Ingress訪問日志中心提供了訪問日志分析、秒級監控指標分析、實時告警等功能,并提供基于AIOps的自動異常巡檢功能。基于這些功能我們可以快速構建出一套企業級的監控系統,能夠以非常小的工作量實現公司所有訪問入口的統一監控。
?
?
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的2020-10-28的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低代码能做什么?这家服务商用钉钉宜搭打造
- 下一篇: 深入浅出FlatBuffers原理