系列文章:
總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程
目錄
1 前言
2 邀約
3 故障注入簡介
4 Istio 故障注入
5 Istio 故障注入實例
5.1 客戶端資源文件
5.2 k8s 服務文件
5.3 部署工作負載(deployment)
5.4 虛擬服務文件
6 驗證故障注入
1 前言
如果你對博客有任何疑問,請告訴我。
2 邀約
你可以從 b 站搜索 “九析”,獲取免費的、更生動的視頻資料:
3 故障注入簡介
很多年前,我看過這樣一部電影:
沒錯,周星馳演得,逃學威龍2。電影的開頭講述了周星馳的飛虎隊執行反恐演習,在最後卻誤射了可愛的小騷妹。
但是這跟故障注入有神馬關係呢?
周星馳的反恐演習其實並不是真的反恐,而只是演習;故障注入本身也並沒有故障,而是人爲引入故障。這種機制都是爲了測試和提高體系健壯性的手段。
在程序開發過程中,我們經常會有這樣的場景,比如要測試調用第三方服務失敗後系統的反應,或者上游服務雪崩時下游服務邏輯處理等。如果沒有故障注入,那麼我們就只能採用斷網、壓測等手段模擬故障,但是這樣的操作實在費事費力,一點都不隨風。
4 Istio 故障注入
Istio 故障注入與其他在網絡層引入錯誤(例如延遲數據包或者直接殺死 Pod)的機制不同,Istio 允許在應用程序層注入故障。這使得可以注入更多相關的故障,比如 HTTP 錯誤代碼等。
Istio 可以注入兩種類型的故障,而這兩種故障都是使用虛擬服務來配置的:
延遲:模擬增加網絡延遲或上游服務過載。
中止:模擬服務故障而導致調用服務不可用。中止通常以 HTTP 錯誤代碼或 TCP 連接失敗表示
5 Istio 故障注入實例
本實例包括 4 個資源文件,3 個 k8s 相關,1 個 istio 相關:
jiuxi-client.yaml
jiuxi-nginx-svc.yaml
jiuxi-nginx-deploy.yaml
jiuxi-nginx-vs.yaml
5.1 客戶端資源文件
jiuxi-client.yaml 內容如下:
執行如下語句進行 Istio 注入,注入後,此 client 將處於網格之內:
istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -
Istio 注入成功成功如下圖所示:
5.2 k8s 服務文件
jiuxi-nginx-svc.yaml 內容如下:
執行如下語句部署 service:
kubectl apply -f jiuxi-nginx-svc.yaml
5.3 部署工作負載(deployment)
jiuxi-nginx-deploy.yaml 內容如下:
部署語句如下:
kubectl apply -f jiuxi-nginx-deploy.yaml
5.4 虛擬服務文件
故障注入就在虛擬服務資源中,內容如下:
部署語句如下:
kubectl apply -f jiuxi-nginx-vs.yaml
自此,整個實例部署完畢。
6 驗證故障注入
執行如下語句登錄客戶端:
kubectl exec -it client-5b77d5949f-clrb7 -- sh
使用 wget 訪問 nginx-svc:
wget -q -O - http://nginx-svc
發現延遲生效,因爲設置的延遲時間是 5s。除去我中間操作花去了大約 3s,發現最終的延遲確實是 5s。如下圖所示:
自此,九析帶你輕鬆完爆了 Istio 故障注入。