kubesphere服务网格servicemesh(Istio)示例:部署 Bookinfo 和管理流量
Istio,作為一種開源服務(wù)網(wǎng)格解決方案,為微服務(wù)提供了強(qiáng)大的流量管理功能。以下是 Istio 官方網(wǎng)站上關(guān)于流量管理的簡介:
Istio 的流量路由規(guī)則可以讓您很容易的控制服務(wù)之間的流量和 API 調(diào)用。Istio 簡化了服務(wù)級別屬性的配置,比如熔斷器、超時和重試,并且能輕松的設(shè)置重要的任務(wù),如 A/B 測試、金絲雀發(fā)布、基于流量百分比切分的概率發(fā)布等。它還提供了開箱即用的故障恢復(fù)特性,有助于增強(qiáng)應(yīng)用的健壯性,從而更好地應(yīng)對被依賴的服務(wù)或網(wǎng)絡(luò)發(fā)生故障的情況。
KubeSphere 基于 Istio 提供了三種灰度策略,包括藍(lán)綠部署,金絲雀發(fā)布和流量鏡像。其中,金絲雀發(fā)布代表了一種有效的軟件開發(fā)策略,在這種策略中,新版本被部署用于測試,基線版本留存在生產(chǎn)環(huán)境中。此策略為正在測試的新版本引入一部分流量,而生產(chǎn)版本將接收其余的流量。
目標(biāo)
在本教程中,您將學(xué)習(xí)如何部署由四個獨(dú)立的微服務(wù)組成的示例應(yīng)用程序 Bookinfo,以及如何使用 KubeSphere 的流量管理功能來發(fā)布新版本。
前置條件
-
您需要啟用 KubeSphere 服務(wù)網(wǎng)格。
-
您需要完成 創(chuàng)建企業(yè)空間、項目、帳戶和角色 中的所有任務(wù)。
-
您需要啟用應(yīng)用治理。為此,請按照以下步驟操作:
使用project-admin登錄控制臺并轉(zhuǎn)到您的項目。找到項目設(shè)置下的高級設(shè)置,點擊編輯,然后選擇編輯網(wǎng)關(guān)。在出現(xiàn)的對話框中,打開應(yīng)用治理旁邊的開關(guān)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-fKRLWpoO-1613792635208)(https://ap3.qingstor.com/kubesphere-website/docs/20200908145220.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-TOj407QX-1613792635217)(https://ap3.qingstor.com/kubesphere-website/docs/20200908150358.png)]
備注
您需要啟用應(yīng)用治理以使用追蹤功能。啟用后若無法訪問路由,請檢查您的路由(Ingress)是否已經(jīng)添加注釋(例如:nginx.ingress.kubernetes.io/service-upstream: true)。
預(yù)計時間
20分鐘左右。
什么是 Bookinfo 應(yīng)用
Bookinfo 應(yīng)用由如下四個獨(dú)立的微服務(wù)組成,其中 reviews 微服務(wù)有三個版本。
- productpage 微服務(wù)會調(diào)用 details 和 reviews 用來生成頁面。
- details 這個微服務(wù)中包含了書籍的信息。
- reviews 這個微服務(wù)中包含了書籍相關(guān)的評論,它還會調(diào)用 ratings 微服務(wù)。
- ratings 這個微服務(wù)中包含了由書籍評價組成的評級信息。
這個應(yīng)用的端到端架構(gòu)如下所示。更多詳細(xì)信息,請參考 Bookinfo 應(yīng)用。
動手實驗
任務(wù) 1: 部署 Bookinfo
使用賬戶project-regular登錄控制臺并進(jìn)入項目,轉(zhuǎn)到應(yīng)用負(fù)載下的應(yīng)用,點擊右側(cè)的部署示例應(yīng)用。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-r0GWq5ho-1613792635224)(https://ap3.qingstor.com/kubesphere-website/docs/20200908100219.png)]
在出現(xiàn)的對話框中點擊下一步,其中必填字段已經(jīng)預(yù)先填充了,同時也已經(jīng)設(shè)置了相關(guān)組件。您無需修改設(shè)置,只需在最后一頁(外網(wǎng)訪問)點擊創(chuàng)建。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Y3ZF69cb-1613792635226)(https://ap3.qingstor.com/kubesphere-website/docs/20200908101041.png)]
在工作負(fù)載中,確保這四個部署都顯示running,代表該應(yīng)用已經(jīng)成功創(chuàng)建。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-OyA2jRiE-1613792635229)(https://ap3.qingstor.com/kubesphere-website/docs/20200908101328.png)]
備注
應(yīng)用部署后運(yùn)行起來可能需要幾分鐘完成。
任務(wù) 2: 訪問 Bookinfo
在應(yīng)用中,點擊應(yīng)用bookinfo查看詳細(xì)信息。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-hIhOWjXt-1613792635230)(https://ap3.qingstor.com/kubesphere-website/docs/20200908102119.png)]
備注
如果您無法在列表中看到該應(yīng)用,請刷新頁面。
在詳細(xì)信息頁面中顯示了用于訪問 Bookinfo 應(yīng)用的主機(jī)名和端口號。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Y3B7JgHS-1613792635232)(https://ap3.qingstor.com/kubesphere-website/docs/20200908102821.png)]
由于將通過 NodePort 在集群外訪問該應(yīng)用,因此您需要在安全組中為出站流量開放上圖中的端口(在本例中,端口號為32277),并根據(jù)需要設(shè)置任意端口轉(zhuǎn)發(fā)規(guī)則。
編輯您的本地主機(jī)文件(/etc/hosts),添加一條配置將主機(jī)名映射到對應(yīng)的公網(wǎng) IP。例如:
# {Public IP} {hostname} 139.198.19.38 productpage.demo-project.192.168.0.2.nip.io警告
不要直接復(fù)制上述內(nèi)容到本地主機(jī)文件,請將其替換成您自己環(huán)境的公網(wǎng) IP 與主機(jī)名。
完成后,點擊點擊訪問按鈕訪問該應(yīng)用。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-C8QLVljG-1613792635233)(https://ap3.qingstor.com/kubesphere-website/docs/20200908105527.png)]
在應(yīng)用詳情頁面,點擊左下角的 Normal user。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-pAFjUPVT-1613792635235)(https://ap3.qingstor.com/kubesphere-website/docs/20200908105756.png)]
在下圖中,您可以注意到 Book Reviews 僅出現(xiàn) Reviewer1 和 Reviewer2 并且沒有任何星星,這是當(dāng)前應(yīng)用程序版本的狀態(tài)。在下面的任務(wù)中,您可以通過金絲雀發(fā)布看到不同的 UI 展現(xiàn)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-sgrobjjV-1613792635236)(https://ap3.qingstor.com/kubesphere-website/docs/20200908110106.png)]
Task 3: 創(chuàng)建金絲雀發(fā)布
回到 KubeSphere 控制臺并選擇灰度發(fā)布,點擊發(fā)布灰度任務(wù)跳轉(zhuǎn)到項目的灰度發(fā)布部分,然后選擇金絲雀發(fā)布并且點擊發(fā)布任務(wù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Lm0N5vPY-1613792635238)(https://ap3.qingstor.com/kubesphere-website/docs/20200908110903.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-qzbfGiGz-1613792635239)(https://ap3.qingstor.com/kubesphere-website/docs/20200908111003.png)]
添加一個任務(wù)名稱(例如:canary-release)然后點擊下一步,選擇 reviews 作為需要更改的組件并點擊下一步。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-E7t9nrFq-1613792635240)(https://ap3.qingstor.com/kubesphere-website/docs/20200908111359.png)]
在下一個對話框中,輸入v2作為灰度版本號并修改鏡像為kubesphere/examples-bookinfo-reviews-v2:1.13.0(v1更改為v2),點擊下一步繼續(xù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-uj9AkLqq-1613792635241)(https://ap3.qingstor.com/kubesphere-website/docs/20200908111958.png)]
金絲雀發(fā)布支持兩種發(fā)布策略:按流量比例下發(fā)和按請求內(nèi)容下發(fā)。在本教程中,請選擇按流量比例下發(fā)并為 v1 和 v2 設(shè)置相同的流量比例(各50%)。你可以點擊中間的圖標(biāo),然后向左或向右移動以更改流量比例,點擊創(chuàng)建完成設(shè)置。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-IM9zk7HZ-1613792635243)(https://ap3.qingstor.com/kubesphere-website/docs/20200908113031.png)]
創(chuàng)建的任務(wù)將會顯示在任務(wù)狀態(tài)里。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-7ZfoWn2C-1613792635244)(https://ap3.qingstor.com/kubesphere-website/docs/20200908113728.png)]
Task 4: 驗證金絲雀發(fā)布
再次訪問 Bookinfo 網(wǎng)站,然后反復(fù)刷新瀏覽器,可以看到 Book Reviews 部分以 50% 的比率在 v1 和 v2 版本之間切換。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-4avgIvQy-1613792635246)(https://ap3.qingstor.com/kubesphere-website/docs/canary.gif)]
Task 5: 查看網(wǎng)絡(luò)拓?fù)?/h3>
在運(yùn)行 KubeSphere 的機(jī)器上執(zhí)行以下命令來引入真實流量,每 0.5 秒模擬訪問一次 Bookinfo。
watch -n 0.5 "curl http://productpage.demo-project.192.168.0.2.nip.io:32277/productpage?u=normal"備注
請確保將上述命令行中的項目名稱,IP 地址和端口號替換成您自己環(huán)境的。
在 Traffic Management 中,可以看到不同微服務(wù)之間的通信、依賴關(guān)系、運(yùn)行狀態(tài)及性能。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-k8dwI8X9-1613792635247)(https://ap3.qingstor.com/kubesphere-website/docs/20200908133652.png)]
點擊組件(例如:reviews)在右側(cè)可以看到流量監(jiān)控信息,顯示 Traffic,Success rate 和 Duration 的實時數(shù)據(jù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-LJMfHrNl-1613792635249)(https://ap3.qingstor.com/kubesphere-website/docs/20200908134454.png)]
Task 6: 查看 Tracing 詳情
KubeSphere 提供基于 Jaeger 的分布式追蹤功能,用來對基于微服務(wù)的分布式應(yīng)用程序進(jìn)行監(jiān)控及故障排查。
在 Tracing 選項卡中,可以清楚地看到請求的所有階段及內(nèi)部調(diào)用,以及每個階段的調(diào)用耗時。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-GUXD6BLN-1613792635250)(https://ap3.qingstor.com/kubesphere-website/docs/20200908135108.png)]
點擊任意條目,可以深入查看請求的詳細(xì)信息及該請求被處理的位置(在哪個機(jī)器或者容器)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ZiQbJ9my-1613792635252)(https://ap3.qingstor.com/kubesphere-website/docs/20200908135252.png)]
Task 7: 接管所有流量
通過金絲雀發(fā)布,您可以通過引入部分實際流量并收集用戶反饋來在線測試新版本。如果一切運(yùn)行順利,則可以將所有流量引入新版本。
在灰度發(fā)布中,點擊金絲雀發(fā)布任務(wù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-SPJMqaQ3-1613792635253)(https://ap3.qingstor.com/kubesphere-website/docs/20200908140138.png)]
在彈出的對話框中,點擊 reviews v2 的三個點并選擇接管所有流量。這代表 100% 的流量將會被發(fā)送到新版本(v2)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-mZqOLDZr-1613792635254)(https://ap3.qingstor.com/kubesphere-website/docs/20200908140314.png)]
備注
如果新版本出現(xiàn)什么問題,可以隨時回滾到之前的 v1 版本。
重新打開 Bookinfo 頁面多刷新幾次瀏覽器,您會發(fā)現(xiàn)頁面只會顯示 reviews v2 的結(jié)果(即帶有黑色星標(biāo)的評級)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-yskXQg41-1613792635256)(https://ap3.qingstor.com/kubesphere-website/docs/20200908140921.png)]
Task 8: 移除舊版本
現(xiàn)在新版本 v2 成功接管了所有流量,您可以根據(jù)需要刪除舊版本并釋放 v1 的資源。
警告
刪除某個版本后,相關(guān)的工作負(fù)載和基于 Istio 的配置資源也將被刪除。
在灰度發(fā)布中,點擊金絲雀發(fā)布任務(wù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Z5RNDe2B-1613792635257)(https://ap3.qingstor.com/kubesphere-website/docs/20200908140138.png)]
在彈出的對話框中,點擊任務(wù)下線以移除舊版本。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-1MLx9TWd-1613792635258)(https://ap3.qingstor.com/kubesphere-website/docs/20200908142246.png)]
以上任務(wù)是使用金絲雀發(fā)布來控制流量和發(fā)布應(yīng)用程序新版本的示例。您也可以嘗試使用灰度發(fā)布中的其他不同發(fā)布策略,或者查看項目用戶指南的相關(guān)章節(jié)。
參考鏈接:
https://v3-0.docs.kubesphere.io/zh/docs/quick-start/deploy-bookinfo-to-k8s/
總結(jié)
以上是生活随笔為你收集整理的kubesphere服务网格servicemesh(Istio)示例:部署 Bookinfo 和管理流量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于kubesphere metrics
- 下一篇: 基于operator sdk编写一个k8