第三十三章 九析帶你輕鬆完爆 Istio - fault injection 故障注入

系列文章:


總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程

目錄

1 前言

2 邀約

3 故障注入簡介

4 Istio 故障注入

5 Istio 故障注入實例

    5.1 客戶端資源文件

    5.2 k8s 服務文件

    5.3 部署工作負載(deployment)

    5.4 虛擬服務文件

6 驗證故障注入


1 前言

        如果你對博客有任何疑問,請告訴我。

1.png


2 邀約

        你可以從 b 站搜索 “九析”,獲取免費的、更生動的視頻資料:

clipboard2.png


3 故障注入簡介

        很多年前,我看過這樣一部電影:

spacer.gifclipboard3.png

        沒錯,周星馳演得,逃學威龍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 內容如下:

spacer.gifclipboard4.png

        執行如下語句進行 Istio 注入,注入後,此 client 將處於網格之內:

istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -

        Istio 注入成功成功如下圖所示:

spacer.gifclipboard5.png

5.2 k8s 服務文件

        jiuxi-nginx-svc.yaml 內容如下:

spacer.gifclipboard6.png

        執行如下語句部署 service:

kubectl apply -f jiuxi-nginx-svc.yaml

5.3 部署工作負載(deployment)

        jiuxi-nginx-deploy.yaml 內容如下:

spacer.gifclipboard7.png

        部署語句如下:

kubectl apply -f jiuxi-nginx-deploy.yaml

5.4 虛擬服務文件

        故障注入就在虛擬服務資源中,內容如下:

spacer.gifclipboard8.png

        部署語句如下:

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。如下圖所示:

spacer.gifclipboard9.png

        自此,九析帶你輕鬆完爆了 Istio 故障注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章