女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes中如何實(shí)現(xiàn)灰度發(fā)布

我快閉嘴 ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-09-22 11:33 ? 次閱讀

Kubernetes 作為基礎(chǔ)平臺,提供了強(qiáng)大的容器編排能力。但是在其上部署業(yè)務(wù)和服務(wù)治理上,仍然會面對一些復(fù)雜性和局限性。在服務(wù)治理上,已經(jīng)有許多成熟的 ServiceMesh 框架用于擴(kuò)充其能力,如 Istio、Linkerd、Dapr 等。本文將主要介紹如何使用 Istio 擴(kuò)充 Kubernetes 灰度發(fā)布的能力。

而在部署上,則會利用開源項(xiàng)目 Rainbond 作為基礎(chǔ)平臺來進(jìn)行實(shí)踐。Rainbond 是一個云原生應(yīng)用管理平臺,它使用「以應(yīng)用為中心的設(shè)計模式。基于這一設(shè)計模式抽象出了標(biāo)準(zhǔn)化的應(yīng)用模型。從使用的體驗(yàn)上不需要學(xué)習(xí)和編寫YAML,即可實(shí)現(xiàn)業(yè)務(wù)應(yīng)用的全生命周期管理。因此使用它簡化業(yè)務(wù)的部署和管理。同時 Rainbond 支持 ServiceMesh 框架的替換,使我們可以按需選擇與業(yè)務(wù)最匹配的 ServiceMesh 框架進(jìn)行服務(wù)治理。

Kubernetes 中如何實(shí)現(xiàn)灰度發(fā)布

當(dāng)你在 Kubernetes 集群中部署業(yè)務(wù)時,可以利用 Kubernetes 原生提供的灰度發(fā)布[1]的方式去上線業(yè)務(wù)。這種方式是通過在舊版本和新版本的服務(wù)之間,定義一個差異化的 Label,根據(jù)不同版本之間的公共 Label 負(fù)載流量到后端 Pod,最終實(shí)現(xiàn)根據(jù) Pod 的副本數(shù)控制流量的百分比。

如下圖所示:用戶定義了兩個 Deployment 對象,其中舊版本名為 frontend-stable,有3個副本。新版本為 frontend-canary,有1個副本。此時定義了一個 Service 對象,使用它們之間公共的 Label 進(jìn)行選擇。這就使得用戶訪問 frontend 這個 Service 時,能以 3:1 的比例同時訪問到兩個版本。并且還可以通過調(diào)整副本數(shù)持續(xù)控制流量比例,最終達(dá)到完整上線。

b1ee913e-39a3-11ed-9e49-dac502259ad0.png

Kubernetes 默認(rèn)的實(shí)現(xiàn)方式在簡單的部署場景下很有效,但是在一些復(fù)雜場景中,仍然會有較大的局限,如:

  1. 業(yè)務(wù)配置自動伸縮后,會直接影響灰度發(fā)布的流量比例
  2. 低百分比的流量控制占用資源高,如 1 % 的流量到達(dá)新版本,則至少需要 100 個副本
  3. 精確的流量分發(fā)控制,使訪問到新版本中的用戶一直是同一批,而不是某個用戶訪問時隨機(jī)切換

Istio 灰度發(fā)布簡述

由于 Kubernetes 提供的灰度發(fā)布方式的局限性,在一些復(fù)雜場景下,我們就需要使用 Istio 來實(shí)現(xiàn)更精細(xì)的灰度發(fā)布策略。在使用 Istio 進(jìn)行灰度發(fā)布時,我們需要了解兩個重要概念:

  1. Virtual services[2]: 虛擬服務(wù)定義了請求到服務(wù)的路徑。可以包含一組路由規(guī)則,使匹配到對應(yīng)規(guī)則的請求能到達(dá)指定目標(biāo)。

  2. Destination rules[3]: 目標(biāo)規(guī)則可以管理到達(dá)該目標(biāo)的流量,如對服務(wù)后端所對應(yīng)的實(shí)例池進(jìn)行分組,再結(jié)合 Virtual services 定義的路由規(guī)則,最終將流量轉(zhuǎn)發(fā)到正確的實(shí)例上。

如下圖所示,以 istio 官網(wǎng)提供的 Bookinfo 示例程序?yàn)槔o出了 virtual services 和 destination rules 的主要定義。其中 virtual services 主要分為兩塊,主機(jī)名和路由規(guī)則。主機(jī)名是客戶端向服務(wù)發(fā)送請求時使用的一個或多個地址。當(dāng)請求到達(dá) virtual services 時,則會根據(jù)其定義的路由規(guī)則匹配。圖中就定義了郵箱以 gmail.com 結(jié)尾的用戶流量只會到達(dá) v3 版本的實(shí)例上。而其他用戶則以 1:9 的比例分別訪問到 v1 和 v2 版本的服務(wù)。這種方式實(shí)現(xiàn)了精確的流量分發(fā)控制。

當(dāng)用戶流量來到 reviews.demo.svc.cluster.local 這個 Service 上時,可以看到 destination rules 的規(guī)則定義中根據(jù) version 這個 label 定義了不同的實(shí)例集,實(shí)現(xiàn)了流量比例與副本數(shù)的解耦。不管 reviews-v1 有多少實(shí)例。始終只有 10% 的流量到達(dá) destination rules 的 v1 子集中。這就解決了業(yè)務(wù)副本數(shù)與流量比例的沖突問題,也使得資源使用更加合理。

b205b72e-39a3-11ed-9e49-dac502259ad0.png

Istio 灰度發(fā)布在 Rainbond 上的實(shí)踐

基于以上理解,我們接下來以 BookInfo 為例來體驗(yàn) Istio 的灰度發(fā)布。

1. 準(zhǔn)備工作:

在開始之前,我們需要提前安裝好所需要的環(huán)境。

「安裝 Rainbond」

參考 Rainbond 官方文檔[4] 快速安裝,安裝完成后可以通過對接 Helm 商店一鍵安裝 Istio 以及相應(yīng)組件。

「安裝 Istio 以及 Kiali」

登錄到 Rainbond 控制臺后,先創(chuàng)建一個團(tuán)隊(duì),團(tuán)隊(duì)英文名對應(yīng) Kubernetes 中的命名空間,Istio 默認(rèn)安裝的命名空間為 istio-system ,因此團(tuán)隊(duì)英文名填寫istio-system,名稱可以填寫為 istio項(xiàng)目。接下來對接 Helm 商店,通過 應(yīng)用市場 -> 點(diǎn)擊號 -> Helm 商店 對接。商店名稱隨意填寫,地址填寫 https://openchart.goodrain.com/goodrain/rainbond。商店對接完成后,我們即可點(diǎn)擊安裝 istio、kiali 等應(yīng)用。詳細(xì)可參考 Istio 安裝[5]

2. 部署 BookInfo 應(yīng)用

在部署 BookInfo 之前,我們需要在 Rainbond 中創(chuàng)建一個團(tuán)隊(duì)和應(yīng)用,并將應(yīng)用的治理模式切換為 Istio 治理模式。在 Rainbond 中應(yīng)用治理模式切換是指可以無侵入地變更應(yīng)用下組件間通信治理模式。

如下圖所示,一個完整應(yīng)用會包含多個微服務(wù)模塊,而 ServiceMesh 框架則是對所有業(yè)務(wù)容器注入 Proxy,根據(jù)注入Proxy的差異可以支持多種類型的 ServiceMesh 實(shí)現(xiàn),比如:Istio、Linkerd、Dapr,應(yīng)用可以按需開啟 ServiceMesh 能力,或更換實(shí)現(xiàn)框架。為了讓 BookInfo 這個應(yīng)用使用到 Istio 的治理能力,所以需要切換到 Istio 治理模式

b22b557e-39a3-11ed-9e49-dac502259ad0.png

「2.1 準(zhǔn)備鏡像」

BookInfo[6] 這個應(yīng)用程序由 6 個微服務(wù)組成,它們之間的依賴如下圖所示。其中 Productpage 這個服務(wù)提供了訪問頁面,從 Details 這個服務(wù)中獲得書籍詳細(xì)信息。從 Reviews 服務(wù)中獲得書籍評價。其中 Reviews-v2 和 Reviews-v3 會從 Ratings 這個服務(wù)中獲得書籍的評級信息。這六個微服務(wù)的鏡像如下:

docker.io/istio/examples-bookinfo-productpage-v1:1.17.0
docker.io/istio/examples-bookinfo-details-v1:1.17.0
docker.io/istio/examples-bookinfo-reviews-v1:1.17.0
docker.io/istio/examples-bookinfo-reviews-v2:1.17.0
docker.io/istio/examples-bookinfo-reviews-v3:1.17.0
docker.io/istio/examples-bookinfo-ratings-v1:1.17.0
b25e0122-39a3-11ed-9e49-dac502259ad0.png

「2.2 部署組件」

我們在應(yīng)用下,選擇添加組件 -> 指定鏡像 -> 填寫鏡像地址 -> 新建組件 -> 確認(rèn)創(chuàng)建,即可依次創(chuàng)建出這 5 個微服務(wù)對應(yīng)的組件。

「2.3 生成可用的 Service」

剛剛我們僅完成了所有服務(wù)的部署,還未定義這些微服務(wù)的訪問策略。以 Productpage 為例,我們通過點(diǎn)擊拓?fù)鋱D中 Productpage 這個組件,即可進(jìn)入這個服務(wù)的管理頁面。找到 端口 -> 添加端口 -> 端口號填寫9080 -> 打開對外服務(wù) -> 點(diǎn)擊生成的路由,即可訪問成功。此時會發(fā)現(xiàn) Productpage 這個組件的頁面還無法拉取到書籍評價信息。這是由于它默認(rèn)使用 details 和 reviews 這兩個 Service 名稱連接到它依賴的組件。此時我們部署的 Reviews-v1 等組件還沒有正確的 Service 名稱。因此還是進(jìn)入組件管理頁面,組件端口 -> 添加端口 -> 端口號填寫9080 -> 修改使用別名 -> 內(nèi)部域名填寫為 reviews-v1 -> 打開對內(nèi)服務(wù)。details、reviews-v2、ratings 等組件都是如此,填寫其對應(yīng)的 Service 名稱后,打開對內(nèi)服務(wù)即可。

最后在應(yīng)用的 K8s 資源下,我們還需要創(chuàng)建一個如下的 Service,用來在 Reviews 的三個版本之間負(fù)載流量。

apiVersion:v1
kind:Service
metadata:
labels:
app:reviews
service:reviews
name:reviews
spec:
ports:
-name:http
port:9080
protocol:TCP
targetPort:9080
selector:
component:reviews#需要在Reviews三個版本中,均添加Kubernetes屬性,設(shè)置上該Label,才能正確生效
sessionAffinity:None
type:ClusterIP

「2.4 編排依賴關(guān)系」

完成以上操作后,訪問 Productpage 應(yīng)用,可以看到書籍評論能正確在三個版本中切換了。此時,可以在應(yīng)用視圖下,切換到編排模式,根據(jù)上述 BookInfo 應(yīng)用的架構(gòu)圖進(jìn)行連線,實(shí)現(xiàn)拓?fù)鋱D的編排。如下圖所示,這樣編排的好處是后期可以將這個應(yīng)用整體發(fā)布出去,其他用戶直接安裝下來即可得到一樣的拓?fù)潢P(guān)系,再也不用擔(dān)心找不到各個服務(wù)依賴的組件。

b2862e7c-39a3-11ed-9e49-dac502259ad0.png

3. 灰度發(fā)布

在完成以上部署操作后,我們得到了一個完整的 BookInfo 程序,但此時還未定義 Istio 相關(guān)配置,所以還需要通過 Kiali 去定義流量規(guī)則。實(shí)現(xiàn)灰度發(fā)布。

「3.1 配置路由規(guī)則」

訪問 Kiali 管理頁面,即可看到該應(yīng)用。在左側(cè)邊欄選擇 Services,找到 reviews 這個 Service,點(diǎn)擊進(jìn)入,右上角 Actions 選擇 Traffic Shifting,即可看到如下配置:拖動滑塊選擇流量比例。下圖中 30% 的流量將會訪問到 reviews-v1 上,70% 的流量訪問到 reviews-v2上。點(diǎn)擊創(chuàng)建后,即可看見頁面左下角,Kiali 自動為你生成了 virtual services 和 destination rules 資源。你可以點(diǎn)擊進(jìn)去根據(jù)自己需求再次編輯。

b2b07f6a-39a3-11ed-9e49-dac502259ad0.png

「3.2 驗(yàn)證路由規(guī)則是否生效」

找到最開始部署的組件 Productpage,進(jìn)入組件管理頁面,點(diǎn)擊右上角訪問入口,可以看到書籍詳情和評級,反復(fù)刷新頁面,可以看到不帶星級的評價信息(reviews-v1)與黑色星級評價信息(reviews-v2)出現(xiàn)的比例大概是 3:7。紅色星級評價信息(reviews-v3)從未出現(xiàn)。

「3.3 驗(yàn)證組件擴(kuò)容對流量的影響」

找到部署的組件 reviews-v1 ,進(jìn)入組件管理頁面 -> 伸縮 -> 實(shí)例數(shù)量設(shè)置為4,此時再次訪問 Productpage 頁面,反復(fù)刷新頁面,可以看到 reviews-v1 擴(kuò)容后,訪問到 reviews-v1 與 reviews-v2 的比例仍為 3:7,組件實(shí)例數(shù)的多少對流量分發(fā)策略沒有影響。

Reference Link

[1]

灰度發(fā)布: https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments

[2]

Virtual services: https://istio.io/latest/docs/concepts/traffic-management/#virtual-services

[3]

Destination rules: https://istio.io/latest/docs/concepts/traffic-management/#destination-rules

[4]

快速安裝 Rainbond: https://www.rainbond.com/docs/quick-start/quick-install/

[5]

Istio 安裝: https://www.rainbond.com/docs/use-manual/app-manage/overview/model/deploy-istio/

[6]

BookInfo: https://istio.io/latest/docs/examples/bookinfo/


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3587

    瀏覽量

    43472
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    22364
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    239

    瀏覽量

    8969

原文標(biāo)題:使用Istio實(shí)現(xiàn)灰度發(fā)布

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Kubernetes Helm入門指南

    環(huán)境中部署和管理復(fù)雜應(yīng)用的挑戰(zhàn)。Helm命令行客戶端工具,主要用于Kubernetes應(yīng)用的Chart的創(chuàng)建、打包、發(fā)布和管理。
    的頭像 發(fā)表于 04-30 13:42 ?1472次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    leader選舉在kubernetes controller是如何實(shí)現(xiàn)

    Kubernetes 的 kube-controller-manager , kube-scheduler, 以及使用 Operator 的底層實(shí)現(xiàn) controller-rumtime 都支持高可用系統(tǒng)的 leader
    的頭像 發(fā)表于 07-21 10:03 ?1954次閱讀

    Kubernetes的Device Plugin設(shè)計解讀

    設(shè)計解讀最近在調(diào)研Kubernetes的GPU調(diào)度和運(yùn)行機(jī)制,發(fā)現(xiàn)傳統(tǒng)的alpha.kubernetes.io/nvidia-gpu即將在1.11版本中下線,和GPU相關(guān)的調(diào)度和部署的代碼將徹底從主干代碼
    發(fā)表于 03-12 16:23

    Kubernetes集群中使用阿里云 SLB 實(shí)現(xiàn)四層金絲雀發(fā)布

    摘要: 上文介紹了如何使用Ingress實(shí)現(xiàn)藍(lán)綠發(fā)布。但是對于很多只提供tcp/udp的服務(wù)來說,七層的ingress不能很好的實(shí)現(xiàn)藍(lán)綠發(fā)布的需求。這里我們就來介紹一下如何使用 SLB
    發(fā)表于 05-10 16:03

    再次升級!阿里云Kubernetes日志解決方案

    月份日志服務(wù)和容器服務(wù)團(tuán)隊(duì)一起發(fā)布了阿里云Kubernetes日志解決方案。1分鐘內(nèi)即可完成整個集群部署,實(shí)現(xiàn)該節(jié)點(diǎn)上宿主機(jī)日志、容器日志、容器stdout等所有數(shù)據(jù)源的一站式采集。并且后續(xù)集群動態(tài)伸縮
    發(fā)表于 05-28 19:08

    如何實(shí)現(xiàn)HDTV視頻增強(qiáng)算法灰度直方圖統(tǒng)計?

    本文介紹了如何在FPGA利用Block RAM的特殊結(jié)構(gòu)實(shí)現(xiàn)HDTV視頻增強(qiáng)算法灰度直方圖統(tǒng)計。
    發(fā)表于 04-30 07:34

    求一種256級灰度掃描時的實(shí)現(xiàn)方案

    本文討論了LED大屏幕視頻控制器單元灰度掃描方法,提出了256級灰度掃描時的實(shí)現(xiàn)方案,并用CPLD器件實(shí)現(xiàn)其控制電路。
    發(fā)表于 05-06 09:29

    Kubernetes API詳解

    的《kubernetes權(quán)威指南》一書的第三章3.2節(jié),獲得出版社和作者的獨(dú)家授權(quán)發(fā)布。本節(jié)重點(diǎn)講述了kubernetes的API概述。 Kubernetes API概述
    發(fā)表于 10-12 16:19 ?0次下載
    <b class='flag-5'>Kubernetes</b> API詳解

    如何用FPGA的Block RAM性能實(shí)現(xiàn)HDTV視頻增強(qiáng)算法灰度直方圖統(tǒng)計

    本文介紹了如何在FPGA 利用Block RAM 的特殊結(jié)構(gòu)實(shí)現(xiàn)HDTV視頻增強(qiáng)算法灰度直方圖統(tǒng)計。
    的頭像 發(fā)表于 07-10 08:10 ?3104次閱讀

    當(dāng)Kubernetes應(yīng)用遇到阿里分批發(fā)布模式

    的功能,以及一旦發(fā)現(xiàn)問題快速回滾的能力。在Kubernetes實(shí)現(xiàn)分批發(fā)布Kubernetes的應(yīng)用模型,Pod和Pod之間一般不進(jìn)行
    發(fā)表于 11-15 14:31 ?209次閱讀

    如何使用FPGA實(shí)現(xiàn)圖像灰度級拉伸算法

    為了調(diào)整圖像數(shù)據(jù)灰度,介紹了一種圖像灰度級拉伸算法的FPGA實(shí)現(xiàn)方法,并針對FPGA的特點(diǎn)對算法的實(shí)現(xiàn)方法進(jìn)行了研究,從而解決了其在導(dǎo)引系統(tǒng)應(yīng)用
    發(fā)表于 04-01 14:14 ?10次下載
    如何使用FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像<b class='flag-5'>灰度</b>級拉伸算法

    如何使用FPGA實(shí)現(xiàn)圖像灰度級拉伸算法

    為了調(diào)整圖像數(shù)據(jù)灰度,介紹了一種圖像灰度級拉伸算法的FPGA實(shí)現(xiàn)方法,并針對FPGA的特點(diǎn)對算法的實(shí)現(xiàn)方法進(jìn)行了研究,從而解決了其在導(dǎo)引系統(tǒng)應(yīng)用
    發(fā)表于 04-01 14:14 ?1次下載
    如何使用FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像<b class='flag-5'>灰度</b>級拉伸算法

    Kubernetes的網(wǎng)絡(luò)模型

    kubernetes ,underlay network 中比較典型的例子是通過將宿主機(jī)作為路由器設(shè)備,Pod 的網(wǎng)絡(luò)則通過學(xué)習(xí)路由條目從而實(shí)現(xiàn)跨節(jié)點(diǎn)通訊。
    的頭像 發(fā)表于 12-14 10:07 ?1021次閱讀

    基于Kubernetes實(shí)現(xiàn)CI/CD配置的流程

    基于 Kubernetes 實(shí)現(xiàn) CI/CD 配置,其實(shí)和往常那些 CI/CD 配置并沒有太大區(qū)別。
    的頭像 發(fā)表于 02-08 16:51 ?1763次閱讀

    nginx+lua+redis實(shí)現(xiàn)灰度發(fā)布

    了這種能力,隨時可以基于這種能力和思想調(diào)整實(shí)現(xiàn)方案:比如nginx+lua+(其他數(shù)據(jù)源)、nginx+(其他腳本語言) 一、灰度方案: 常見的灰度實(shí)現(xiàn)方案: 1.請求路由:通過請求
    的頭像 發(fā)表于 12-17 10:01 ?367次閱讀