在雲原生應用、微服務架構或者容器化應用中,您可以配置存活探針(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健康並準備好提供流量。
前提條件
已在叢集中部署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認證訪問。