全部產品
Search
文件中心

Container Service for Kubernetes:在Knative中配置連接埠探測

更新時間:Jun 19, 2024

在Knative中,探針主要用於監測和管理服務的健康情況和可用性。通過配置存活探針(Liveness Probe)和就緒探針(Readiness Probe),您可以確保應用程式處於健康狀態且準備好接收流量。本文介紹如何在Knative中配置自訂監聽連接埠。

工作原理

您可以通過配置存活探針(Liveness Probe)和就緒探針(Readiness Probe)監測Knative服務的健康狀態和可用性。相較於Kubernetes社區的探針策略,Knative採用更頻繁的積極探測,以最大限度減少冷啟動時間,加速Pod從啟動到啟動並執行過程。

  • Liveness Probe:存活探針用於監視容器的健康情況。如果容器處於失敗狀態或在容器運行中服務未成功啟動,存活探針將重新啟動容器。

  • Readiness Probe:配置就緒探針可以有效管理應用的自動擴縮容過程,確保只有準備好的執行個體可以接收流量,從而提升系統的可靠性和響應效率。

下圖介紹Knative探針的工作流程。

  1. 在Knative Service CR中定義Readiness Probe或Liveness Probe。

  2. kubelet針對指定的容器執行Liveness Probe。

  3. Knative重寫並由queue-proxy容器執行Readiness Probe。從Activator組件或queue-proxy容器等特定地方開始進行探測,以確保整個網路鏈路已配置並準備就緒。

    說明

    未定義探針時,Knative將為主容器(Primary Container)定義預設的就緒探針。它將檢查Knative服務流量連接埠上的TCP Socket。

  4. Knative為queue-proxy容器本身定義了一個Readiness Probe。queue-proxy的健全狀態彙總了所有容器(主容器和Sidecar)重寫Readiness Probe的所有結果。當queue-proxy容器探針返回成功響應並且Knative網路層配置完成,Knative將認為Pod健康並準備好提供流量。

前提條件

配置自訂監聽連接埠

配置方式

您可以在Knative Service中配置readinessProbelivenessProbe欄位定義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

支援的探測類型

探測類型

說明

httpGet

通過HTTP GET請求檢查服務健康和存活狀況,並依據響應狀態代碼確定成功與否。

tcpSocket

通過嘗試開啟一個TCP串連來檢查服務健康和存活狀況。

exec

在容器內執行指定命令,並依據命令的退出碼確定探測是否成功。

grpc

通過調用gRPC Health Checking Protocol定義的方法判斷服務的健康和存活狀況。

說明

由於當前Knative內建了PreStop用於處理流量優雅下線,因此不支援自訂PreStop探測類型。