華為雲講解:4. Istio灰階釋出與技術實作
文章目錄
- 華為雲講解:4. Istio灰階釋出與技術實作
-
- 典型釋出類型對比
-
- 藍綠釋出
- 金絲雀釋出
- A/B 測試
- Istio流量治理技術解析
-
- 規則配置
-
- DestinationRule
- VirtualService
-
- VirtualService例子
- 智能灰階釋出介紹
-
- 灰階版本的存在形式
- 灰階釋出流程
- 智能灰階釋出
-
- 自适應釋出參數
- 健康名額
- 開源灰階釋出項目
-
-
- Flagger
-
- 灰階釋出功能展示Demo
典型釋出類型對比
- 藍綠釋出
- 灰階釋出(金絲雀釋出)
- A/B測試
通過例子闡述三種類型的概念
在一個公司,一個程式員負責一部分工作,有一天他要調離這個崗位,這個時候主管招了一個新的員工負責他這部分工作,涉及到一個交接的過程。有下面幾種情況:
主管會被交接者在同一時刻把所有工作都配置設定給新人,然後看新人是否勝任,如果可以的話,接下來所有工作由着新人來做。 ——藍綠釋出
被交接者把一小部分工作,配置設定給新人,然後看效果,如果一切順利會逐漸的把工作一部分一部分的全部配置設定給新人。 ——金絲雀釋出
兩個人同時分擔一部分工作,然後主管邀請另外的主管或者組内的成員一起給這兩個人打分,如同他們産出代碼的品質和其他同僚之間的關系, 各個次元評判這個兩個人的輸出。最後綜合決策到底留下哪一個。 ——A/B測試
藍綠釋出

首先有個一個v1 版本,使用者通過LB通路v1版本,如果要釋出一個v2版本,可以通過LB全量切換流量到v2版本,如果v2版本沒問題則v1下線。在這個工程中有個重點
全量切換
。缺點是如果v2版本有問題,就會影響到所有的使用者。這個時候就引出 金絲雀釋出。
金絲雀釋出
**金絲雀釋出的由來:**礦工下井的時候會帶上一隻金絲雀,用來測試瓦斯的濃度,如果瓦斯濃度過高的話,金絲雀會首先感覺到然後身亡。對礦工提到一個警示的作用,然後立刻逃生。
國外喜歡這種叫金絲雀釋出,國内叫灰階釋出指的是同一種釋出形式。
這張圖中可以看出它是隻導一部分流量給新的的版本v2,然後逐漸加大v2版本的流量,最終讓v2版本到達100%的流量。最後下線v1版本。這是一種很平滑很謹慎的釋出形式,漸進的一個過程。生産大多數都采用這種釋出形式。
A/B 測試
A/B 測試是對特定使用者采樣,比如說特定終端,或者他使用的浏覽器以及他的地域各種方面,進行采樣,然後對采樣的回報資料進行一個對比測試,大多數情況下會對appUI 進行測試,側重于軟體的易用性、可用性、受歡迎程度。然後做出綜合的決策後執行決策。
圖中是對PC端的使用者通路v1版本,手機端使用者通路v2版本。可以先配置政策,然後監控兩個版本的名額,在分析資料,統計概念在裡面,然後在做出決策,最後執行決策。
Istio流量治理技術解析
那Istio如何做到這些灰階釋出的。
看這張架構圖來說明:主要流量是有Poilt來管理,Poilt在整個Istio架構中處在一個大腦的位置,它是管理我們政策配置的中心,使用者可以通過開發政策的API
Rlues API
來配置這些政策, 然後Poilt把這些規則轉換成自己的 語言模型,再轉化成Envoy認識的API 再分發給下面每個工作的
sidecar
。
分發的内容主要包括兩部分,一部分是和平台相關的服務發現、cluster、Endpoint通信網絡 相關的資訊。
第二部分就是路由資訊,VirtualService、DestinationRule ServiceEntry這類資訊。
Poilt比較強大的地方Platform Adapter擴充卡,可以對接服務發現相關的平台,比如Kubernetes Mesos。
規則配置
和灰階釋出相關的主要是VirtualService、DestinationRule,
- VirtualService在Istio服務網格中定義路由規則,控制路由如何路由到服務上。
- DestinationRule是VirtualService路由生效後配置應有與請求的政策集。
- ServiceEntry是通常用于在Istio服務網格之外啟用對服務的請求。
- Gateway為HTTP/TCP 流量配置負載均衡器,最常見的是網格的邊緣的操作,以啟用應用程式的入口流量。
DestinationRule
DestinationRule所定義的政策,決定了經過路由處理之後的流量的通路政策。
- host——對象服務,作用于哪一個服務。
- trafficPolicy——流量政策主要配置負載均衡、連接配接池配置,服務最大連接配接數,和熔斷配置就是超出了你最大的請求數我們要采取什麼措施。比如說後端要被移除多長時間。
- Subsets —— 定義服務的版本
VirtualService
VirtualService定義了一系列針對指定服務的流量路由規則。
- Host —— 流量的目标主機,她不像DestinationRule的host隻能配着一個,VirtualService的host可以配置多個通路的服務。也就是VirtualService定義的流量規則作用于很多的服務。也就是VirtualService的由原來虛拟Service。可以把一些Service捆綁在一塊。
- Gateways —— Gateway名稱清單, 從外面通路我們的service要經過我們的Gateway,沒有這個字段預設是match,就是對網格裡面的
都生效。sidecar
-
http —— 流量規則配置 (HTTPRoute)的清單,也是一個數組。兩個點一個比對到規則是什麼,比對到我采取的動作是什麼。
下面圖中的httpMatchRequest是路由規則比如uri,headers,port,method。
DestinatiinWeight 路由後的分發權重,另外還有重定向,重寫,逾時,重試等等
- Tcp —— tcp流量規則配置 (TCPRoute)的清單。和http一樣隻是他的規則少一些因為他是四層代理。他可以根據destinationSubnets,port showlabel路由。路由到隻有一些權重的規則DestinatiinWeight
- tls—— tls和https(TLSRoute)流量規則的清單。
VirtualService例子
- 基于權重的路由
給v1配置設定20%流量,給v2配置設定80%流量
- 基于請求内容的路由
如果請求頭cookie裡面帶group=dev 我們會把它配置設定到v1版本,如果其他預設配置設定到v2版本。
- 複雜灰階場景下的VirtualService
對于特定使用者路由的分發,對于特定網站通路的使用者資訊,基于一個權重的路由,通路特定網站50%流量導入v1版本,另外50%到v2版本。其他預設導入v1。
智能灰階釋出介紹
灰階版本的存在形式
Istio的版本模型和k8s版本模型如何對應的。
Istio由不同版本,在底層k8s實作 是由Service然後裡面對應多個deployment實作,每個版本由一個deployment實作。版本是通過大label實作的
灰階釋出流程
首先建立灰階釋出版本,然後觀測灰階釋出的運作狀态cpu記憶體是否正常,版本狀态,正常的話配置灰階政策,配置政策之後根據請求内容導流到特定使用者。在通過我們關心的名額去觀測兩個不同版本所呈現的狀态。如果狀态OK就采納灰階版本,讓灰階版本接受全部流量,把原版本下線。如果覺得版本有問題 ,我們可以更新灰階釋出的版本再來一次灰階釋出流程。如果宣布是吧就把灰階版本下線。
智能灰階釋出
目标:細粒度控制自動化的持續傳遞。
特點
- 根據使用者細分特定版本導流
- 流量管理
- 關鍵名額可觀測,比如應用的請求數量,錯誤率,遲延,都是可以通過圖形化來觀測到。
- 釋出流程的自動化
華為雲講解:4. Istio灰階釋出與技術實作華為雲講解:4. Istio灰階釋出與技術實作
運維人員定義一個系統期望怎麼去釋出我們的軟體做一個自動化的配置(配置需要入參下面說。),然後配置下發到智能灰階釋出控制器裡面,控制器根據配置檢查服務是否正常,正常的話會去配置路由。
路由配置完作用與我們的服務,在然後配置設定流量配置設定到不同的版本,然後不同版本上報資料擴充卡。
控制器實時監控擴充卡和版本服務的健康并作出決策,根據我們預先配置的政策,由控制器調整路由的權重。而不是由人來操作。慢慢調整步長,在作用于我們的服務。
如果有問題由控制器終止這次釋出。 沒問題的話就下線我們的原版本。有問題就復原。擴充卡還可以把資料顯示到監控系統,可以看到灰階釋出名額的回放。
還有一些釋出過程中的報警比如釋出失敗釋出成功這些事件上報給我們的告警系統。比如說給你發郵件短信。
還有釋出過程的日志,放到日志系統。
自适應釋出參數
- 負載健康狀态 —— cpu 記憶體 健康狀态
- 請求的成功率 ——
- 平均請求時延
- 流量權重步長
- 復原門限值——每次出現錯誤,錯誤累計多少次判定釋出失敗然後復原、
健康名額
RED
請求數量、錯誤率、錯誤次數、時延
USE
跟應用的性能相關,健康程度,cpu 記憶體使用率網絡IO,能列出這些名額說明在健康監控方面是一個健康比較完備的系統。
開源灰階釋出項目
Flagger
是基于Istio Prometheus和k8s的控制器
是把配置放到一個叫canary的crd,可以參考crd。
下面可以看出他是逐漸調整自己的步長,實作一個灰階的效果。
灰階釋出功能展示Demo
建立一個應用testapp,元件是使用tomcat,然後是v7版本一個執行個體數。
通路一下,7.0版本
現在我們要另一個版本的釋出,版本是v8 鏡像版本8.0
通路規則政策
配置通路方式,做一個流量 分發規則規則是:windiws系統 chrome浏覽器通路的話是v8版本。
chrome浏覽器通路是v8版本
再用IE通路是一個v7的版本
權重政策
我們換個灰階政策權重政策,v820%流量v780%流量
通路大多數到了v7少數到v8
多次通路後可以看到流量占比。這是華為雲監測的流量占比
接管所有流量
接管所有流量之後可以發現通路的一直是v8版本了。
下線原版本v7
下線之可以看到在曆史可以看到釋出曆史