Kubernetes で gRPC サービスをデプロイする
このページでは、Kubernetes の Quarkus に gRPC サービスをデプロイする方法について説明します。 引き続き gRPC スタートガイド の例を使用します。
Quarkus Kubernetes エクステンションを使用するようにプロジェクトを設定する
Quarkus Kubernetes エクステンションをビルドファイルに追加します。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes</artifactId>
</dependency>
implementation("io.quarkus:quarkus-kubernetes")
次に、Kubernetes Ingress リソースを使用してアプリケーションを公開します。
quarkus.kubernetes.ingress.expose=true
Quarkus Kubernetes は、ポート名 http
を使用して HTTP サーバーをバインドし、ポート名 grpc
を使用して gRPC サーバーをバインドします。デフォルトでは、Quarkus アプリケーションはポート名 http
のみを公開するため、HTTP サーバーのみがパブリックにアクセス可能になります。代わりに gRPC サーバーを公開するには、application.properties で quarkus.kubernetes.ingress.target-port=grpc
プロパティーを設定します。
quarkus.kubernetes.ingress.target-port=grpc
プロパティー quarkus.grpc.server.use-separate-server=false を使用して、HTTP サーバーと gRPC サーバーの両方に同じポートを使用するように Quarkus を設定する場合は、デフォルトの target-port を変更する必要はありません。
|
最後に、ターミナルでコマンドを実行して Kubernetes マニフェストを生成する必要があります。
quarkus build
./mvnw install
./gradlew build
生成されたら、 target/kubernetes
ディレクトリーを確認します。
target/kubernetes
└── kubernetes.json
└── kubernetes.yml
Kubernetes でアプリケーションをデプロイする方法の詳細は、Kubernetes ガイド を参照してください。
gRPC ヘルスプローブの使用
デフォルトでは、Kubernetesリソースにはreadiness プローブとliveness プローブが含まれていません。これらを追加するには、ビルドファイルにSmallRye Healthエクステンションをインポートします:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>
implementation("io.quarkus:quarkus-smallrye-health")
ヘルスエクステンションの詳細は、SmallRye Health ガイド を参照してください。 |
デフォルトでは、このエクステンションは、プローブが HTTP サーバーを使用するように設定します (Quarkus REST (旧称 RESTEasy Reactive) などの一部のエクステンションによって提供される HTTP サーバー)。内部的には、このプローブは、生成される gRPC Health サービス も使用します。
HTTP サーバーを公開する Quarkus エクステンションをアプリケーションが使用していない場合でも、設定にプロパティー quarkus.kubernetes.readiness-probe.grpc-action-enabled=true
を追加することで、プローブが gRPC Health サービスを直接使用するように設定できます。
quarkus.kubernetes.readiness-probe.grpc-action-enabled=true