Deploying your gRPC Service in Kubernetes

此页面介绍了如何在 Kubernetes 中部署你的 gRPC 服务。我们将继续 the Getting Started gRPC guide 中的示例。

Configuring your project to use the Quarkus Kubernetes extension

将 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

如果你将 Quarkus 配置为使用属性 quarkus.grpc.server.use-separate-server=false 为 HTTP 和 gRPC 服务器使用相同的端口,那么你不需要更改默认值 target-port

最后,我们需要通过在终端中运行命令来生成 Kubernetes 清单:

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

生成后,你可以查看 target/kubernetes 目录:

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

你可以在 the Kubernetes guide 中找到有关如何在 Kubernetes 中部署应用程序的更多信息。

Using gRPC Health probes

默认情况下,Kubernetes 资源不包含准备或活动探测。若要添加它们,请将 Smallrye Health 扩展导入你的构建文件:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-health</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-smallrye-health")

你可以在 the SmallRye Health guide 中找到有关 Health 扩展的更多信息。

默认情况下,此扩展将配置探测以使用 HTTP 服务器(由一些扩展提供,如 Quarkus REST(以前称为 RESTEasy Reactive)扩展)。在内部,此探测还会使用 the generated gRPC Health services

如果你的应用程序不使用公开 HTTP 服务器的任何 Quarkus 扩展,你仍然可以通过将属性 quarkus.kubernetes.readiness-probe.grpc-action-enabled=true 添加到你的配置中来配置探测以直接使用 gRPC Health 服务:

quarkus.kubernetes.readiness-probe.grpc-action-enabled=true