系列文章:
總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程
目錄
1 前言
2 邀約
3 介紹
4 灰度
5 destination rule 樣例
5.1 客戶端資源文件
5.2 deployment 資源文件
5.3 service 資源文件
5.4 Istio virtual service 資源文件
5.5 Istio destination rule 資源文件
6 Istio 注入
7 驗證 destination rule
1 前言
如果你對博客有任何疑問,請告訴我。
2 邀約
你可以從 b 站搜索 “九析”,獲取免費的、更生動的視頻資料:
3 介紹
在上章節介紹了一個使用 Virtual Service 實現按權重(weight)分配流量的例子。整個過程如下架構圖所示:
整個流控過程僅僅添加了一個 virtual service 就得以解決,有關 virtual service 的代碼如下所示:
但是上面這種方案在於調用方通過兩層服務才能調用到最終的 Pod(比如:客戶端需要通過 web-svc 和 nginx-svc 才能最終調用到 Nginx Pod)。能不能僅僅只通過一層服務就能達到這樣的效果呢?(即:只通過 web-svc)。答案是必須可以。
4 灰度
其實上面的樣例非常山寨,導致根本就沒有實際工作場景可以複製,僅僅只是爲了展示獨立 virtual service 功能。
但是按權重分配流量確是工作中常見的需求,比如灰度、金絲雀、藍綠髮布等。
灰度,意味着做事並沒有那麼敞亮,比如,你想跟一個心儀的女子上演一幕東京愛情故事,你的做法大概是跟她曖昧、愛撫、親吻、最後進行愛的鼓掌。整個過程的本質就是完成一次狀態轉移,即從孤軍奮戰式擼管狀態轉移到團隊協作式鼓掌狀態。
灰度發佈的過程跟上面的過程比較類似,都是亦步亦趨,循循善誘的過程。即:將版本 v1 的服務變更到版本 v2,但是卻並不採用剛烈的極端做法。具體做法是先切 20% 流量給版本 v2,觀察一陣子沒啥異常事情發生,就再切 20% 流量,然後逐步切換剩下的其他流量,最終完成整個版本的替換以及所有用戶流量的轉移。
5 destination rule 樣例
下面介紹使用 virtual service + destination rule 來實現灰度發佈。有關 destination rule 的理論在下章節介紹。整個樣例的架構圖如下:
樣例所需要的資源文件介紹如下:
# 客戶端,用來訪問 httpd-v1 和 httpd-v2 的容器資源文件
jiuxi-client.yaml
# deployment,聲明並定義 httpd 的資源文件
jiuxi-deploy.yaml
# service,關聯 httpd pod 的資源文件
jiuxi-svc.yaml
# Istio virtual service,聲明流量路由和權重的資源文件
jiuxi-vs.yaml
# Istio destination rule,定義流量路由的資源文件
jiuxi-dr.yaml
5.1 客戶端資源文件
jiuxi-client.yaml:
5.2 deployment 資源文件
jiuxi-deploy.yaml:
5.3 service 資源文件
jiuxi-svc.yaml:
5.4 Istio virtual service 資源文件
jiuxi-vs.yaml:
5.5 Istio destination rule 資源文件
jiuxi-dr.yaml:
6 Istio 注入
要使得 virtual service 和 destination rule 生效,必須要保證通訊雙方都處於 Istio 服務網格之內,即:必須經過 Istio 的注入,執行語句如下:
istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -
istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -
7 驗證 destination rule
登入 busybox client 容器,訪問 jiuxi-svc,發現 dr 已經生效,截圖如下:
自此,九析帶你輕鬆完爆了 Istio destination rule 實例。