溫馨提示×

溫馨提示×

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

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

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

發(fā)布時(shí)間:2020-08-15 00:36:35 來源:ITPUB博客 閱讀:165 作者:阿里巴巴云原生 欄目:云計(jì)算

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

作者 | 白寂 阿里云開發(fā)工程師

導(dǎo)讀:前三篇文章我們介紹了應(yīng)用的開發(fā)和部署,那么在應(yīng)用成功上云后,我就要面對應(yīng)用的管理話題了,這一篇我們來看看如何做線上發(fā)布,并且是可灰度的。

相關(guān)文章推薦:

  • 《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 —— 開發(fā)篇》
  • 《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 部署篇(開發(fā)部署)》
  • 《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 部署篇(工具部署)》

前言

在新版本上線時(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)證通過后再全量升級。

金絲雀發(fā)布配置

首先,進(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)異常。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

在發(fā)布頁面,可以選擇通過上傳 JAR 包或者填入 JAR 包地址的方式選擇要進(jìn)行發(fā)布的新版本應(yīng)用部署包。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

在選擇好要進(jìn)行發(fā)布的新版本應(yīng)用部署包后,接下來進(jìn)行發(fā)布策略的配置。這里分為兩個(gè)部分:

  • 第一部分可以對發(fā)布批次進(jìn)行設(shè)置,例如設(shè)置發(fā)布灰度批次,首批進(jìn)行灰度的 pod 實(shí)例個(gè)數(shù),分批間處理方式等;
  • 第二部分可以對流量灰度規(guī)則進(jìn)行配置,我們可以選擇按流量內(nèi)容進(jìn)行灰度或者簡單地按照流量比例進(jìn)行灰度,下面將詳細(xì)介紹這兩種發(fā)布策略配置。

設(shè)置發(fā)布策略

在批次發(fā)布這里我們可以進(jìn)行的配置有:

  • 首批灰度數(shù)量:在點(diǎn)擊發(fā)布后,會首先將首批灰度數(shù)量個(gè)數(shù)的實(shí)例進(jìn)行新版本的發(fā)布,為了保證應(yīng)用的穩(wěn)定性,首批灰度的實(shí)例數(shù)不能超過應(yīng)用實(shí)例總數(shù)的 50%。比如當(dāng)前實(shí)例數(shù)是 7 臺,那么最多只能選擇 3 臺作為首批灰度的實(shí)例;
  • 剩余批次:首批灰度發(fā)布完成后,剩余的應(yīng)用實(shí)例將按照此處指定的批次發(fā)布完成;
  • 分批間處理方式:剩余批次間的處理方式可選擇手動或者自動,若選擇自動,則剩余的幾個(gè)批次將在前一批發(fā)布完成后進(jìn)行自動發(fā)布,自動發(fā)布的批次間隔也可進(jìn)行配置,例如配置每批次在發(fā)布完成后,30 分鐘后自動進(jìn)行下一批次的發(fā)布;
  • 批次內(nèi)部署間隔:每一批次內(nèi),如果此批次內(nèi)要發(fā)布的應(yīng)用實(shí)例數(shù)大于 1,則要進(jìn)行此配置指定批次內(nèi)實(shí)例部署間隔。

在下面的例子中,我們現(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ù)覽。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

設(shè)置灰度規(guī)則

目前支持 按內(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 所示。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)
(圖1)
SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)
(圖2)

按請求內(nèi)容進(jìn)行灰度

按請求內(nèi)容進(jìn)行灰度可以進(jìn)行下面指定參數(shù)的配置,來決定有哪些請求內(nèi)容特征的流量將作為灰度流量進(jìn)入灰度實(shí)例中。

  • 協(xié)議類型:可選擇 Spring Cloud 和 Dubbo,這里我們主要介紹 Spring Cloud 協(xié)議。在 Spring Cloud 協(xié)議下需要對 HTTP 請求路徑進(jìn)行配置;
  • 條件模式:針對下面配置的的條件列表,可配置條件模式為: 同時(shí)滿足下列條件滿足下列任一條件。符合條件模式的請求將作為灰度流量;
  • 條件列表:Spring Cloud 協(xié)議下可分別對 Cookie、Header 和 Parameter 3 種請求內(nèi)容進(jìn)行條件配置。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

按比例進(jìn)行灰度

按比例灰度即設(shè)置 流量比例,然后請求流量會按配置的比例被轉(zhuǎn)發(fā)到當(dāng)前的灰度分組中進(jìn)行處理。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

灰度發(fā)布并驗(yàn)證新版本應(yīng)用是否符合預(yù)期

配置好發(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)控灰度流量》。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

灰度發(fā)布后,在基本信息頁面查看部署包是否為新部署的應(yīng)用版本。在實(shí)例部署信息頁面查看應(yīng)用實(shí)例的運(yùn)行狀態(tài)是否為運(yùn)行正常。

SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)

結(jié)語及其后續(xù)

本章我們介紹了如何對 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>

向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