在云原生應用、微服務架構或者容器化應用中,您可以配置存活探針(Liveness Probe)和就緒探針(Readiness Probe)以確保應用程序處于健康狀態且已準備好接收流量。相較于Kubernetes社區的探針策略,Knative的策略更為頻繁,以最大限度縮短冷啟動時間,加速Pod從啟動到運行的過程。
工作原理
您可以通過配置存活探針(Liveness Probe)和就緒探針(Readiness Probe)監測Knative服務的健康狀態和可用性。
Liveness Probe:存活探針用于監視容器的健康狀況。如果容器處于失敗狀態或在容器運行中服務未成功啟動,存活探針將重新啟動容器。
Readiness Probe:配置就緒探針可以有效管理應用的自動擴縮容過程,確保只有準備好的實例可以接收流量,從而提升系統的可靠性和響應效率。
下圖介紹Knative探針的工作流程。
在Knative Service CR中定義Readiness Probe或Liveness Probe。
kubelet針對指定的容器執行Liveness Probe。
Knative重寫并由queue-proxy容器執行Readiness Probe。從Activator組件或queue-proxy容器等特定地方開始進行探測,以確保整個網絡鏈路已配置并準備就緒。
說明未定義探針時,Knative將為主容器(Primary Container)定義默認的就緒探針。它將檢查Knative服務流量端口上的TCP Socket。
Knative為queue-proxy容器本身定義了一個Readiness Probe。queue-proxy的運行狀況聚合了所有容器(主容器和Sidecar)重寫Readiness Probe的所有結果。當queue-proxy容器探針返回成功響應并且Knative網絡層配置完成,Knative將認為Pod健康并準備好提供流量。
前提條件
已在ACS集群中部署Knative。具體操作,請參見部署Knative。
配置自定義監聽端口
配置方式
您可以在Knative Service中配置readinessProbe
、livenessProbe
字段用于分別定義Readiness Probe和Liveness Probe。配置方式與Kubernetes中一致,請參見配置存活、就緒和啟動探針。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: runtime
namespace: default
spec:
template:
spec:
containers:
- name: first-container
image: <YOUR-IMAGE> # 請將<YOUR-IMAGE>替換為您的鏡像名稱。
ports:
- containerPort: 8080
readinessProbe: # 容器啟動后用來確定容器何時就緒的健康檢查。
httpGet: # 使用TCP Socket連接進行存活檢查的端口。
port: 8080 # 這里可以配置一個與containerPort不同的端口,用于服務的就緒探測。
path: "/health"
livenessProbe: # 檢查容器的存活狀態。
tcpSocket:
port: 8080
- name: second-container
image: <YOUR-IMAGE>
readinessProbe:
httpGet:
port: 8089
path: "/health"
livenessProbe:
tcpSocket:
port: 8089
支持的探測類型
探測類型 | 說明 |
| 通過HTTP GET請求檢查服務健康和存活狀況,并依據響應狀態碼確定成功與否。 |
| 通過嘗試打開一個TCP連接來檢查服務健康和存活狀況。 |
| 在容器內執行指定命令,并依據命令的退出碼確定探測是否成功。 |
| 通過調用gRPC Health Checking Protocol定義的方法判斷服務的健康和存活狀況。 |
由于當前Knative內置了PreStop用于處理流量優雅下線,因此不支持自定義PreStop探測類型。
相關文檔
您可以為自定義域名配置相應的HTTPS證書,請參見配置HTTPS證書訪問。