您好,登錄后才能下訂單哦!
作者 | 白寂 阿里云開發(fā)工程師
導(dǎo)讀:前三篇文章我們介紹了應(yīng)用的開發(fā)和部署,那么在應(yīng)用成功上云后,我就要面對應(yīng)用的管理話題了,這一篇我們來看看如何做線上發(fā)布,并且是可灰度的。
相關(guān)文章推薦:
在新版本上線時(shí),無論是從產(chǎn)品穩(wěn)定性還是用戶對新版本的接受程度上考慮,直接將老應(yīng)用升級到新版本應(yīng)用都有很大風(fēng)險(xiǎn)的。我們一般的做法是,保證新老版本同時(shí)在線,并且先將少部分流量切換到新版本應(yīng)用上,同時(shí)在此期間對新版本的應(yīng)用請求進(jìn)行觀察。在確認(rèn)新版本沒有問題后,再逐步將更大比例的流量切換到新版本上。這個(gè)過程的核心是可以對流量的流入轉(zhuǎn)發(fā)規(guī)則進(jìn)行配置,EDAS 的金絲雀發(fā)布能力,提供了多個(gè)版本同時(shí)在線的能力,并且提供了靈活的配置規(guī)則來給不同的版本進(jìn)行流量分配。
部署在 EDAS Kubernetes 集群中的 Spring Cloud 微服務(wù)應(yīng)用,在新版本發(fā)布的時(shí)候可以使用金絲雀發(fā)布進(jìn)行小規(guī)模驗(yàn)證,驗(yàn)證通過后再全量升級。
首先,進(jìn)入 EDAS 的應(yīng)用部署頁面,對我們要進(jìn)行部署升級的應(yīng)用進(jìn)行發(fā)布,在這里我們選擇金絲雀(灰度)發(fā)布。需要注意的是,對灰度發(fā)布的流量控制,當(dāng)前只對非入口應(yīng)用的 Dubbo 和 Spring Cloud 應(yīng)用生效。所謂入口應(yīng)用,即承接外部流量的第一個(gè)應(yīng)用節(jié)點(diǎn)。并且若您的應(yīng)用使用了 HPA、Rancher、Istio、或者依賴Deployment.Metadata.Name 或 Deployment.Metadata.Uid 的功能與配置等 K8s 原生功能或配置時(shí),請勿使用灰度發(fā)布或分批發(fā)布。否則,應(yīng)用部署之后,這些 K8s 原生功能或配置將出現(xiàn)異常。
在發(fā)布頁面,可以選擇通過上傳 JAR 包或者填入 JAR 包地址的方式選擇要進(jìn)行發(fā)布的新版本應(yīng)用部署包。
在選擇好要進(jìn)行發(fā)布的新版本應(yīng)用部署包后,接下來進(jìn)行發(fā)布策略的配置。這里分為兩個(gè)部分:
在批次發(fā)布這里我們可以進(jìn)行的配置有:
在下面的例子中,我們現(xiàn)在有 7 個(gè) pod 應(yīng)用實(shí)例,選擇首批對 2 個(gè)實(shí)例進(jìn)行灰度升級。在首批 2 個(gè)實(shí)例的灰度發(fā)布完成后,將剩下的 5 個(gè)實(shí)例分 3 個(gè)批次進(jìn)行發(fā)布。這3個(gè)批次的批次間處理方式選擇自動發(fā)布,在當(dāng)前批次發(fā)布完成 30 分鐘后自動進(jìn)行下一批次的發(fā)布。同時(shí),由于第 2 批次和第 2 批次內(nèi)實(shí)例個(gè)數(shù)為兩臺,因此選擇批次內(nèi)兩臺實(shí)例部署間隔為 60 秒。在發(fā)布頁面右側(cè)可以對我們的發(fā)布策略配置信息進(jìn)行預(yù)覽。
目前支持 按內(nèi)容灰度和 按比例灰度兩種方式設(shè)置灰度規(guī)則。按請求內(nèi)容進(jìn)行灰度支持將請求內(nèi)容符合指定灰度規(guī)則條件的流量作為灰度流量,進(jìn)入到灰度實(shí)例中,例如,選擇用戶 ID 模 100 小于等于 40 的流量作為灰度流量進(jìn)入灰度實(shí)例進(jìn)行處理,而用戶 ID 模 100 大于 40 的仍然進(jìn)入非灰度實(shí)例進(jìn)行處理,如圖 1 所示。而按流量比例進(jìn)行灰度是指,將指定比例的請求流量作為灰度流量進(jìn)入灰度實(shí)例進(jìn)行處理,例如指定 40% 的流量作為灰度流量,如圖 2 所示。
(圖1)
(圖2)
按請求內(nèi)容進(jìn)行灰度可以進(jìn)行下面指定參數(shù)的配置,來決定有哪些請求內(nèi)容特征的流量將作為灰度流量進(jìn)入灰度實(shí)例中。
按比例灰度即設(shè)置 流量比例,然后請求流量會按配置的比例被轉(zhuǎn)發(fā)到當(dāng)前的灰度分組中進(jìn)行處理。
配置好發(fā)布配置后,即可開始進(jìn)行灰度發(fā)布,EDAS 將先在指定的灰度分組中部署新版本應(yīng)用,可在進(jìn)入 變更詳情頁面查看部署進(jìn)度和狀態(tài)。如果在灰度發(fā)布時(shí),發(fā)現(xiàn)新版本有問題,還可以終止變更并對應(yīng)用進(jìn)行回滾。
在灰度的發(fā)布過程中,可對應(yīng)用進(jìn)行監(jiān)控,以監(jiān)控灰度流量是否符合預(yù)期,同時(shí)可以對應(yīng)用狀態(tài)進(jìn)行新老版本的對比。在當(dāng)前批次的灰度流量驗(yàn)證完成后,在變更詳情頁面單擊開始下一批,完成后續(xù)分批發(fā)布。如果在驗(yàn)證過程中,發(fā)現(xiàn)新版本應(yīng)用有問題,可以在變更詳情頁面右上角單擊立即回滾。在彈出的立即回滾對話框確認(rèn)回滾的影響,然后單擊回滾。
關(guān)于如何監(jiān)控灰度流量,可以參考 EDAS文檔《監(jiān)控灰度流量》。
灰度發(fā)布后,在基本信息頁面查看部署包是否為新部署的應(yīng)用版本。在實(shí)例部署信息頁面查看應(yīng)用實(shí)例的運(yùn)行狀態(tài)是否為運(yùn)行正常。
本章我們介紹了如何對 EDAS Kubernetes 集群上的 Spring Cloud 應(yīng)用進(jìn)行灰度發(fā)布,在灰度發(fā)布過程中,我們可以靈活地配置發(fā)布策略、灰度規(guī)則以及在發(fā)布過程中對流量及應(yīng)用狀態(tài)進(jìn)行監(jiān)控,并且提供了終止回滾等操作,最大程度地保證應(yīng)用能夠平滑地進(jìn)行版本升級。接下來的文章中,我們將詳細(xì)介紹在發(fā)布過程中如何對應(yīng)用進(jìn)行監(jiān)控。
“ 阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號?!?/p>
免責(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)容。