溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

發(fā)布時(shí)間:2020-08-10 14:35:15 來源:ITPUB博客 閱讀:1042 作者:PaaS小魔仙 欄目:云計(jì)算

Istio 是Google繼Kubernetes之后的又一開源力作,主要參與的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服務(wù)治理解決方案,包含微服務(wù)的管理、網(wǎng)絡(luò)連接以及安全管理等關(guān)鍵能力,無需修改任何代碼就能夠?qū)崿F(xiàn)微服務(wù)的負(fù)載均衡,服務(wù)與服務(wù)之間的認(rèn)證授權(quán)以及監(jiān)控。從整個基礎(chǔ)設(shè)施角度上看,可以將它理解為PaaS平臺上的一個面向微服務(wù)管理平臺的補(bǔ)充。

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

                                                               Istio 架構(gòu)示意圖

Istio 與Kubernetes

Kubernetes 提供了部署、升級和有限的運(yùn)行流量管理能力;利用service的機(jī)制來做服務(wù)注冊和發(fā)現(xiàn),轉(zhuǎn)發(fā),通過kubeproxy有一定的轉(zhuǎn)發(fā)和負(fù)載均衡能力。但并不具備上層如熔斷、限流降級、調(diào)用鏈治理等能力.

Istio 則很好的補(bǔ)齊了k8s在微服務(wù)治理上的這部分能力,同時(shí)是基于k8s構(gòu)建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服務(wù)治理上的非常關(guān)鍵的一環(huán)。

 

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

Istio 與k8s緊密結(jié)合,包括:Sicecar 運(yùn)行在k8s pod里,作為一個proxy和業(yè)務(wù)容器部署在一起,部署過程對用戶透明。Mesh中要求業(yè)務(wù)程序的運(yùn)行感知不到sidecar的存在,基于k8sd的pod的設(shè)計(jì)這部分做的更徹底,對用戶更透明,用戶甚至感知不到部署sidecar的這個過程。試想如果是通過VM上部署一個agent,不會有這么方便。

Pilot 中包含一個controller,通過list/watch kube-apiserver自動發(fā)現(xiàn)K8S中的services、endpoints。它通過在Kubernetes里面注冊一個controller來監(jiān)聽事件,從而獲取Service和Kubernetes的Endpoint以及Pod的關(guān)系,但是在轉(zhuǎn)發(fā)層面,不再使用kube-proxy轉(zhuǎn)發(fā)了,而是將這些映射關(guān)系轉(zhuǎn)換成為pilot自己的轉(zhuǎn)發(fā)模型,下發(fā)到envoy進(jìn)行轉(zhuǎn)發(fā)。

 

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

K8s 編排容器服務(wù)已經(jīng)成為一種事實(shí)上的標(biāo)準(zhǔn);因?yàn)槲⒎?wù)與容器在輕量、快速部署運(yùn)維等特征的匹配,微服務(wù)運(yùn)行在容器中也正成為一種標(biāo)準(zhǔn)實(shí)踐;對于云原生應(yīng)用,采用Kubernetes構(gòu)建微服務(wù)部署和集群管理能力,采用Istio構(gòu)建服務(wù)治理能力,將逐漸成為應(yīng)用微服務(wù)轉(zhuǎn)型的標(biāo)準(zhǔn)配置。

      

 

自行管理Istio與CCE上使用Istio服務(wù)網(wǎng)格的對比

華為云 · 云容器引擎CCE(Cloud Container Engine)提供高可靠高性能的企業(yè)級容器應(yīng)用管理服務(wù),支持Kubernetes社區(qū)原生應(yīng)用和工具,簡化云上自動化容器運(yùn)行環(huán)境搭建:

?   簡單易用:自動化創(chuàng)建容器集群,一站式部署/運(yùn)維容器應(yīng)用,一鍵式滾動升級;

?   高性能:自研高性能容器網(wǎng)絡(luò),秒級自動彈性伸縮,支持高性能裸金屬容器私有集群;

?   企業(yè)級:集群控制面HA和跨AZ高可用,容器應(yīng)用優(yōu)雅伸縮,安全下線,保障業(yè)務(wù)不掉線;

?   開放兼容:兼容Kubernetes/Docker社區(qū)原生版本,CNCF認(rèn)證的Kubernetes服務(wù)提供商,社區(qū)的主要貢獻(xiàn)者;

 

下列從安裝、運(yùn)行管理和監(jiān)控多維度對比自建Istio和華為云CCE上使用Istio的差別:


自建

華為云CCE

Istio 包管理

用戶自行下載和管理

用戶不感知

運(yùn)行配置

用戶自行配置運(yùn)行環(huán)境和依賴

用戶不感知

Istio 安裝

用戶自行探索和安裝

用戶不需要關(guān)注具體細(xì)節(jié),創(chuàng)建集群時(shí)按需啟用。

Sidecar 注入

用戶自行探索和開發(fā)、配置

用戶不感知

Istio 升級

用戶自行探索、開發(fā)不影響業(yè)務(wù)的升級方案

提供完整解決方案,按需進(jìn)行控制面和數(shù)據(jù)面的升級操作

應(yīng)用調(diào)用鏈

用戶自行探索、開發(fā)和安裝、配置

對接華為云APM/AOM服務(wù),提供請求調(diào)用鏈跟蹤查看能力

應(yīng)用拓?fù)?

用戶自行探索、開發(fā)和安裝、配置

對接華為云APM/AOM服務(wù),提供查看應(yīng)用拓?fù)淠芰?

性能監(jiān)控

用戶自行探索、開發(fā)和安裝、配置

對接華為云APM/AOM服務(wù),提供請求響應(yīng)時(shí)延的實(shí)時(shí)性能狀態(tài)監(jiān)控

 

云原生應(yīng)用在CCE上的部署、管理實(shí)踐

云原生應(yīng)用、云平臺與微服務(wù)架構(gòu)

云原生應(yīng)用,是指原生為在云平臺上部署運(yùn)行而設(shè)計(jì)開發(fā)的應(yīng)用。公平的說,大多數(shù)傳統(tǒng)的應(yīng)用,不做任何改動,都是可以在云平臺運(yùn)行起來的,只要云平臺支持這個傳統(tǒng)應(yīng)用所運(yùn)行的計(jì)算機(jī)架構(gòu)和操作系統(tǒng)。只不過這種運(yùn)行模式,僅僅是把虛擬機(jī)當(dāng)物理機(jī)一樣使用,不能夠真正利用起來云平臺的能力。

云計(jì)算平臺的核心能力就是提供按需分配資源和彈性計(jì)算的能力,而云原生應(yīng)用的設(shè)計(jì)理念就是讓部署到云平臺的應(yīng)用能夠利用云平臺的能力實(shí)現(xiàn)按需使用計(jì)算資源和彈性伸縮。

微服務(wù)架構(gòu)是實(shí)現(xiàn)企業(yè)分布式系統(tǒng)的一種架構(gòu)模式,即將一個復(fù)雜的單體應(yīng)用按照業(yè)務(wù)的限定上下文,分解成多個獨(dú)立部署的組件。這些獨(dú)立部署的組件,就稱為微服務(wù)。而在談?wù)撛圃鷳?yīng)用與微服務(wù)架構(gòu)關(guān)系的時(shí)候,根據(jù)上下文不同可以從兩個角度去看。

1) 宏觀的云原生應(yīng)用,即將整個分布式系統(tǒng)看作一個應(yīng)用,這個角度下,微服務(wù)架構(gòu)是實(shí)現(xiàn)云原生應(yīng)用的一種架構(gòu)模式;

2) 微觀的云原生應(yīng)用,即每個微服務(wù)是一個應(yīng)用,這種語境下,每個微服務(wù)要按照云原生應(yīng)用的設(shè)計(jì)理念去設(shè)計(jì)(如我們所熟知的云原生12要素),才能真正實(shí)現(xiàn)微服務(wù)架構(gòu)所要達(dá)到的目的,即讓分布式系統(tǒng)具備按需使用計(jì)算資源和彈性伸縮的能力。

在華為云CCE容器服務(wù)中,我們將宏觀的云原生應(yīng)用,稱之為“應(yīng)用”,而將微觀層面的云原生應(yīng)用,稱之為“組件“,用這兩個概念來對分布式應(yīng)用進(jìn)行管理:


Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

                                          圖: 應(yīng)用、組件與工作負(fù)載的關(guān)系

在CCE上進(jìn)行云原生應(yīng)用管理的實(shí)踐

創(chuàng)建Kubernetes集群

       在創(chuàng)建應(yīng)用前,需要準(zhǔn)備好一個Kubernetes集群(1.9及以上版本),并啟用Istio服務(wù)網(wǎng)格治理。登錄CCE控制臺,在左側(cè)導(dǎo)航欄中單擊“資源管理 > 虛擬機(jī)集群”,在“虛擬機(jī)集群”界面,單擊“創(chuàng)建Kubernetes集群”,按照向?qū)街鸩脚渲茫?

 

圖1:創(chuàng)建Kubernetes集群

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

圖2:使能服務(wù)網(wǎng)格,一鍵式安裝Istio并自動使能應(yīng)用sidecar注入:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

其他集群創(chuàng)建步驟、配置與已有CCE上創(chuàng)建虛擬機(jī)集群一致.

創(chuàng)建云原生應(yīng)用

這里我們以Istio開源社區(qū)的bookinfo樣例應(yīng)用為例,其包含ProductPage、Reviews、Details、Ratings這4個微服務(wù),拓?fù)浣Y(jié)構(gòu)以及網(wǎng)絡(luò)訪問信息如下:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

在CCE左側(cè)導(dǎo)航欄中選擇“應(yīng)用管理”,單擊“創(chuàng)建應(yīng)用”,選擇“向?qū)絼?chuàng)建” (后續(xù)將支持通過helm模板一鍵式創(chuàng)建微服務(wù)應(yīng)用以及其流量策略配置,更方便管理),分三大塊配置:應(yīng)用基本信息、網(wǎng)格內(nèi)組件定義、對外放開路由配置。

1、 首先定義應(yīng)用的基本信息:名稱、選擇所在集群和namespace:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

2、 第二步,點(diǎn)擊添加組件,按照上方的應(yīng)用拓?fù)浜途W(wǎng)絡(luò)設(shè)計(jì),把組件加入到服務(wù)網(wǎng)格:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

A、 添加ratings微服務(wù)組件(容器內(nèi)監(jiān)聽端口為9080,開放至service mesh內(nèi)部訪問端口也配置為9080,后者可根據(jù)客戶端配置自行調(diào)整)

1 )配置組件基本信息:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

2 )選擇負(fù)載鏡像,并配置版本號為v1

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

3 ) 點(diǎn)擊“下一步”,負(fù)載高級配置中可以選擇配置升級策略、縮容策略、自定義監(jiān)控等,我們這里不做配置,點(diǎn)擊“添加“:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

可以看到我們?yōu)閎ookinfo添加了一個微服務(wù)組件進(jìn)網(wǎng)格

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

 

B、 添加reviews微服務(wù)組件

參考上述添加ratings的步驟,添加reviews:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

C、 添加details微服務(wù)組件

參考上述添加組件步驟,添加details微服務(wù)組件:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

D、    添加productpage微服務(wù)組件

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

3、     最后,配置應(yīng)用對外開放的訪問路由,從上方拓?fù)湓O(shè)計(jì)可知,productpage作為訪問入口:

A 、點(diǎn)擊“添加應(yīng)用訪問方式“

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

B 、選擇開放至外部訪問的組件,并配置開放端口

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

配置后的訪問方式信息如下所示:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

最后點(diǎn)擊右下角“創(chuàng)建”,啟動應(yīng)用,在應(yīng)用列表中可以看到新建的分布式微服務(wù)應(yīng)用bookinfo及其包含的微服務(wù)組件:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

通過應(yīng)用開放的訪問入口訪問productpage:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

 

在CCE上使用Istio進(jìn)行灰度發(fā)布的實(shí)踐

一鍵式在集群上啟用Istio服務(wù)網(wǎng)格

集群下應(yīng)用如果需要做微服務(wù)治理,只需要在創(chuàng)建集群時(shí)點(diǎn)擊啟用服務(wù)網(wǎng)格即可, 不需要自行進(jìn)行Istio鏡像下載、yaml配置、安裝、升級等與應(yīng)用業(yè)務(wù)無關(guān)的復(fù)雜基礎(chǔ)設(shè)施構(gòu)建工作

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

開發(fā)打包新版本

下方我們以開發(fā)了一個新版本reviews微服務(wù)為例(初始容器鏡像版本號為1.5.0),新版本鏡像版本號為1.5.0-v2,并且已在本地開發(fā)機(jī)通過docker push上傳至華為云容器鏡像服務(wù)(SWR):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

新版本在現(xiàn)在版本基礎(chǔ)上增加對ratings微服務(wù)的調(diào)用,支持評分星星級別展示.


發(fā)布灰度版本并配置灰度策略

現(xiàn)在我們計(jì)劃通過灰度發(fā)布的方式,平滑的在現(xiàn)網(wǎng)升級,在應(yīng)用列表頁面,展開bookinfo下的組件信息,選擇reviews微服務(wù)組件的“添加灰度版本”:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

啟動灰度版本: 配置灰度版本號v2,確認(rèn)好鏡像版本(系統(tǒng)會默認(rèn)選擇最新版本的鏡像),點(diǎn)擊“啟動負(fù)載”即可啟動灰度版本,容器高級配置已默認(rèn)繼承已有版本

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

觀察灰度版本運(yùn)行狀態(tài)并配置灰度策略: 按照比例分配灰度版本流量比例(這里以20%為例),觀察負(fù)載啟動成功后,點(diǎn)擊“提交策略”:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

回到組件列表可以看到,review微服務(wù)已處于灰度發(fā)布狀態(tài):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

對review服務(wù)進(jìn)行灰度發(fā)布前后的流量對比如下所示:

初始版本:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

灰度狀態(tài):如圖示,review v2版本調(diào)用ratings服務(wù)獲取星級評價(jià),并將20%流量分流至本版本上

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

訪問productpage,可以看到部分請求可以顯示星級評價(jià),部分請求仍然是老版本的顯示效果(即沒有評星這個新特性),并且出現(xiàn)的比例接近1:4.

部分訪問結(jié)果為原有的頁面:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

部分訪問結(jié)果為帶有星級評價(jià)特性的頁面:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

持續(xù)觀測灰度版本運(yùn)轉(zhuǎn)狀態(tài),并進(jìn)行流量切換

接下來,我們會持續(xù)觀測灰度版本的運(yùn)行狀態(tài),在確認(rèn)業(yè)務(wù)處理、性能滿足要求后,我們可以選擇逐步調(diào)大灰度版本的流量比例,而后進(jìn)一步將流量全部導(dǎo)流至灰度版本上:

 

?   觀察健康與性能狀態(tài):

點(diǎn)擊CCE左側(cè)導(dǎo)航欄“運(yùn)維中心”進(jìn)入AOM服務(wù):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

選擇“指標(biāo)”->“應(yīng)用”菜單,持續(xù)觀察review服務(wù)灰度版本v2的健康狀態(tài)與性能狀態(tài):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

?    觀察調(diào)用鏈以及請求響應(yīng)時(shí)延:在CCE應(yīng)用管理中,點(diǎn)擊bookinfo應(yīng)用,查看詳情,可以看到CCE服務(wù)提供了請求調(diào)用鏈跟蹤能力,能夠?qū)崿F(xiàn)分布式異常請求的快速定位 (當(dāng)前提供開源zipkin和grafana能力,后續(xù)將對接至華為云AOM服務(wù)提供相應(yīng)能力)

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布


Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

可以看到V2版本運(yùn)轉(zhuǎn)正常,那么下一步我們將逐步擴(kuò)大流量比,最后將流量全部導(dǎo)至灰度版本,在cce服務(wù)中,點(diǎn)擊組件名稱,進(jìn)入組件詳情頁面,點(diǎn)擊“接管所有流量”:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

系統(tǒng)提示會將接管原有版本的所有流量,點(diǎn)擊“確定“按鈕:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

現(xiàn)在所有訪問reviews的流量都導(dǎo)向v2版本:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

              訪問productpage,所有的請求都會呈現(xiàn)星級評價(jià)特性:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

最后,我們將原有老版本(V1)從平臺移除:

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

點(diǎn)擊確認(rèn)后,可以看到該微服務(wù)只剩下v2版本在運(yùn)轉(zhuǎn):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

通過 Istioctl 工具進(jìn)行更多微服務(wù)流量治理

         在上述規(guī)則的基礎(chǔ)上, cce Istio 服務(wù)網(wǎng)格還提供了 Istioctl 命令行工具,實(shí)現(xiàn)更全面的流量治理能力,如限流、熔斷、連接池管理、會話保持等。進(jìn)入 資源管理 “-> “虛擬機(jī)集群 ,點(diǎn)擊所要管理的集群,可以看到 Istio 命令行的下載和使用指導(dǎo):

Istio最佳實(shí)踐:在K8s上通過Istio服務(wù)網(wǎng)格進(jìn)行灰度發(fā)布

 

 

總結(jié)

菊廠云CCE容器引擎 + Istio + 應(yīng)用運(yùn)維AOM/APM +容器鏡像服務(wù) SWR,提供了完整的云原生應(yīng)用從開發(fā)、部署、上線、監(jiān)控的完整生命周期管理全棧服務(wù),讓企業(yè)上云更簡單,運(yùn)行更高效。

目前Istio服務(wù)網(wǎng)格能力已開放公測,可通過下方鏈接,快速申請公測,華為云容器服務(wù)的專家將全力為您服務(wù),為您的成功保駕護(hù)航.

 

申請鏈接: https://console.huaweicloud.com/cce2.0/?region=cn-north-1#/app/istio/istioPublicBeta


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI