すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Knativeでのポートプロービングの設定

最終更新日:Nov 15, 2024

クラウドネイティブアプリケーション、マイクロサービスアーキテクチャ、またはコンテナ化されたアプリケーションでは、livenessプローブとreadinessプローブを設定して、アプリケーションが正常にトラフィックを受信できるようにすることができます。 オープンソースKubernetesのプロービングポリシーと比較して、Knativeはポッドのコールドスタート時間を短縮し、ポッドの起動から実行状態への移行を加速するために、より頻繁でアクティブなプローブを採用しています。

制御ポリシー機能の動作

livenessプローブとreadinessプローブを設定して、アプリケーションが正常にトラフィックを受信できるようにすることができます。

  • Livenessプローブ: コンテナのヘルスステータスを監視するために使用されます。 コンテナーがFailed状態の場合、またはコンテナー内のサービスの起動に失敗した場合、livenessプローブはコンテナーを再起動します。

  • Readiness probes: アプリケーションの自動スケーリングを効率的に管理し、Ready状態のポッドのみがトラフィックを受信できるようにします。 これにより、サービスの安定性と応答速度が向上します。

次の図は、Knativeでのプローブの動作を示しています。

image
  1. Knative Service CustomResource (CR) で準備プローブまたはライブネスプローブを定義します。

  2. kubeletは、指定されたコンテナをプローブするためにlivenessプローブを送信します。

  3. Knativeは、readinessプローブを書き換えて、queue-proxyコンテナに送信します。 探索は、ネットワークリンク全体が構成され、準備ができていることを確認するために、Activatorコンポーネントまたはキュープロキシコンテナから開始されます。

    説明

    プローブが定義されていない場合、Knativeはプライマリコンテナのデフォルトの準備プローブを定義します。 デフォルトの準備プローブは、KnativeサービスのポートのTCPソケットをチェックします。

  4. Knativeは、queue-proxyコンテナの準備プローブを定義します。 キュープロキシのステータスは、プライマリコンテナとサイドカーコンテナを含むすべてのコンテナによって書き換えられた準備完了プローブの結果を集約します。 queue-proxyコンテナが正常な応答を返し、Knativeネットワーク層が設定されると、Knativeはポッドが正常であり、トラフィックを受け入れる準備ができていると判断します。

前提条件

Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。

カスタムリスニングポートの設定

設定方法

readinessProbeまたはlivenessProbeフィールドをKnativeサービスに追加して、準備プローブとlivenessプローブをそれぞれ設定します。 設定方法は、Kubernetesで使用されるものと同じです。 詳細については、「Liveness、Readiness、Startup Probesの設定」をご参照ください。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: runtime
  namespace: default
spec:
  template:
    spec:
      containers:
      - name: first-container
        image: <YOUR-IMAGE>      # Replace <YOUR-IMAGE> with the actual image name. 
        ports:
          - containerPort: 8080
        readinessProbe:       # Check when a container is ready after the container starts up. 
          httpGet:            # The port that is used for liveness probes through TCP socket connections. 
            port: 8080        # Specify a port other than the containerPort for readiness probes. 
            path: "/health"
        livenessProbe:            # Check whether a container is alive. 
          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ヘルスチェックプロトコルで定義されたメソッドを呼び出して、サービスのヘルスステータスとライブネスをチェックします。

説明

組み込みのPreStopフックは、グレースフルシャットダウンをサポートするためにKnativeによって既に提供されているため、カスタムPreStopプローブはサポートされません。

関連ドキュメント

カスタムドメイン名を使用してHTTPS経由でサービスにアクセスするように証明書を設定できます。 詳細については、「HTTPS経由でサービスにアクセスするための証明書の設定」をご参照ください。