您好,登錄后才能下訂單哦!
本文主要給大家介紹使用K8S檢查Istio Service流量健康講析,文章內容都是筆者用心摘選和編輯的,使用K8S檢查Istio Service流量健康講析具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下主題內容吧。
Istio利用k8s的探針對service進行流量健康檢查,有兩種探針可供選擇,分別是liveness和readiness:
liveness探針用來偵測什么時候需要重啟容器。比如說當liveness探針捕獲到程序運行時出現的一個死鎖,這種情況下重啟容器可以讓程序更容易可用。
readiness探針用來使容器準備好接收流量。當所有容器都ready時被視為pod此時ready。比如說用這種信號來控制一個后端服務,當pod沒有到ready狀態時,服務會從負載均衡被移除。
使用場景:
liveness探針被用來移除異常的pod,不重啟pod就無法恢復的應用常使用liveness探針。比如前文提到的死鎖,進程會一直處于活躍狀態,k8s會認為正常并繼續發送流量。但使用liveness探針之后會發現應用已經不再處理請求,繼而重啟異常pod。
readiness探針被用來控制流量進入pod。比如應用程序需要加載一個大的文件或者需要啟動后進行一些配置。但默認只要容器進程啟動完成就會有流量發送過來。使用readiness探針會一直等待直到完成所有加載或配置再讓流量進入。
兩種探針的配置相似,區別在于使用livenessProbe還是readinessProbe字段
探針配置參數:
探針有以下幾個參數:
initialDelaySeconds:容器啟動之后到啟動探針之間的時延
periodSeconds:探針的循環執行時間,最小單位為1秒
timeoutSeconds:探針超時時間,默認值1秒
successThreshold: 成功閾值數,失敗之后最小的連續成功信號數,liveness必須是1
failureThreshold:失敗閾值數,當探針失敗之后,在放棄之前k8s嘗試重新執行探針次數,如果是liveness探針放棄意味著重啟容器,readiness探針意味著pod標記為unready,默認值為3次。
HTTP探針還有以下額外的參數:
host: 所連接主機名,默認值是pod IP
scheme: HTTP或者HTTPS
path: 訪問HTTP 云服務器的路徑
httpHeaders: 訪問HTTP的報頭
port:訪問容器的端口
探針可以進行三種操作:
命令行:在容器中執命令行操作,exit 0為成功狀態
HTTP請求:向容器發送HTTP GET請求,如果返回值為200-400之間為成功狀態
TCP 請求:向指定端口發送TCP請求,如果該端口開放監聽,則為成功
下面我們來演示以下健康檢查的操作:
命令行操作
首先準備busybox鏡像,設置如下的yaml配置文件:
在配置文件中我們設置了一個liveness探針,在容器啟動之后的5s,每隔5s去執行一下訪問/tmp/healthy這個文件的操作,如果操作成功返回0,則為容器健康,如果返回值不為0, 會重啟容器。
當容器啟動之后會執行:
touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
前30s會建立/tmp/healthy文件,30s之后刪除,此時訪問會返回錯誤.
使用kubectl create -f ./your-exec-liveness.yaml建立pod
在30s之內通過kubectl describe pod liveness-exec來查看pod狀態,為健康:
在30s之后查看pod的狀態,發現無法訪問文件,返回不健康:
之后查看pod的狀態,pod的重啟次數為1,此時通過liveness探針檢測到不健康狀態已經重啟pod。
如果使用readiness探針,需要修改上文your-exec-liveness.yaml的紅框字段:
通過與上文相同的方法,在30s之前查看pod的狀態,為ready:
在30s之后查看pod狀態,readiness探針將應用容器置為unready, ready的容器是istio-proxy:
可以看到readiness探針并不會重啟容器。
HTTP請求
另一種使用liveness探針的方法是HTTP GET請求,可以用來監測網頁的運行狀態,我們用google liveness鏡像來進行演示:
這里我們讓HTTP的云服務器/healthz路徑前10s返回200 的OK狀態,10s之后返回狀態500。
設置如下的配置文件:
liveness探針會向容器的8080端口發送請求訪問/healthz, 在容器啟動3s之后每隔3s發送一次。我們建立pod并查看pod的運行狀態kubectl describe pod liveness-http:
會發現10s之后 liveness探針監測到了返回值是500,狀態標記為不健康。
TCP請求
兩種探針還可以共同使用,下面以TCP請求為例,TCP和HTTP連接類似。使用google的goproxy鏡像,該鏡像會在8080端口開放TCP socket連接,使用如下的配置文件:
我們用探針去訪問8000端口查看pod狀態;此時理論上應該無法連接:
可以看到readiness探針會每隔10s監測,無法訪問時會將pod置于unready狀態,liveness探針20s監測,無法成功則重啟pod。
通過以上演示我們了解了如何配置兩種探針和執行三種操作。通過合理的探針配置,可以實時監控Istio各個pod的運行狀態,提供方便的應用治理手段。
看完以上關于使用K8S檢查Istio Service流量健康講析,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業知識信息 ,可以持續關注我們的行業資訊欄目的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。