Deploying your gRPC service in Kubernetes

このページでは、Kubernetes の Quarkus に gRPC サービスをデプロイする方法について説明します。 引き続き gRPC スタートガイド の例を使用します。

Quarkus Kubernetes エクステンションを使用するようにプロジェクトを設定する

Quarkus Kubernetes エクステンションをビルドファイルに追加します。

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-kubernetes</artifactId>
</dependency>
build.gradle
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
If you configure Quarkus to use the same port for both HTTP and gRPC servers with the property quarkus.grpc.server.use-separate-server=false, then you don’t need to change the default target-port.

最後に、ターミナルでコマンドを実行して Kubernetes マニフェストを生成する必要があります。

CLI
quarkus build
Maven
./mvnw install
Gradle
./gradlew build

生成されたら、 target/kubernetes ディレクトリーを確認します。

target/kubernetes
└── kubernetes.json
└── kubernetes.yml

Kubernetes でアプリケーションをデプロイする方法の詳細は、Kubernetes ガイド を参照してください。

gRPC ヘルスプローブの使用

デフォルトでは、Kubernetesリソースにはreadiness プローブとliveness プローブが含まれていません。これらを追加するには、ビルドファイルにSmallRye Healthエクステンションをインポートします:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-health</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-smallrye-health")
More information about the health extension can be found in the SmallRye Health guide.

デフォルトでは、このエクステンションは、プローブが 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