Kubernetes 的 Dev Services
Kubernetes 的开发服务会在开发模式和运行测试时自动启动 Kubernetes API 服务器(以及所需的 etcd)。因此,您无需手动启动它。应用程序将自动配置。
支持以下 testcontainers:kind、k3s 或仅 API(默认)
启用/禁用 Kubernetes 的开发服务
Kubernetes 的开发服务会自动启用,除非
-
quarkus.kubernetes-client.devservices.enabled
设置为false
-
配置了
api-server-url
-
找到有效的 Kube 配置文件且
quarkus.kubernetes-client.devservices.override-kubeconfig
未设置为true
-
您包含了
quarkus-test-kubernetes-client
依赖项
Kubernetes 的开发服务依赖于容器引擎:Docker 或 Podman 来启动服务器。如果您的环境不支持此类容器引擎,您将需要启动一个运行在 VM、云端等上的 Kubernetes 集群。在这种情况下,您可以通过 Kube 配置文件或 KubernetesClientBuildConfig 类中提供的各种属性来配置 Kubernetes 集群访问。 |
共享集群
大多数情况下,您需要共享集群以供多个应用程序使用。Kubernetes 的开发服务实现了一种*服务发现*机制,以便在开发模式下运行的多个 Quarkus 应用程序可以共享一个集群。
Kubernetes 的开发服务使用 quarkus-dev-service-kubernetes 标签启动容器,该标签用于识别容器。 |
如果您需要多个(共享)集群,可以配置 quarkus.kubernetes-client.devservices.service-name
配置属性并指定集群名称。它会查找具有指定名称的容器,或者在找不到时启动一个新容器。默认的服务名称是 kubernetes
。
在开发模式下默认启用共享,但在测试模式下禁用。您可以使用 quarkus.kubernetes-client.devservices.shared=false
来禁用共享。
开发者其他注意事项
如果您想在 Kubernetes 集群(由开发服务作为测试容器启动)之上运行测试用例,请将以下依赖项添加到您的 pom 文件中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
</dependency>
并设置 Quarkus 属性来选择集群类型或 kube 版本。
然后,您将能够创建一个 Fabric8 Kubernetes Client 对象,该对象能够执行许多 kube 任务,具体细节请参见此 备忘单。
package org.acme;
import org.junit.jupiter.api.Test;
import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class ArgocdExtensionDevModeTest {
@Inject
private KubernetesClient client;
@Test
public void testCreatePod() {
client.resource(new PodBuilder()
.withMetadata(<METADATA_OBJECT>)
.withSpec(<SPEC_OBJECT>)
.build())
.inNamespace(<USER_NAMESPACE>)
.create();
}
配置集群
Kubernetes 的开发服务提供三种不同的 Kubernetes 集群类型。每种类型支持不同的 Kubernetes API 版本。您可以使用 quarkus.kubernetes-client.devservices.flavor
和 quarkus.kubernetes-client.devservices.api-version
属性来配置类型和版本。
quarkus.kubernetes-client.devservices.flavor=api-only # k3s or kind
quarkus.kubernetes-client.devservices.api-version=1.22
api-only
只启动一个 Kubernetes API 服务器(以及所需的 etcd)。如果您需要一个可以启动 Pod 的功能齐全的 Kubernetes 集群,可以使用 k3s
或 kind
。k3s
需要以*特权模式*启动容器。kind
测试容器现在支持使用 podman rootless 或 rootfull。
如果未设置 api-version
,将使用给定类型的最新版本。否则,版本必须匹配给定类型支持的版本。
配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
---|---|---|
是否应使用 Kubernetes 的开发服务。(默认为 true)如果为 true 并且未配置 Kubernetes 客户端,则将启动并使用 Kubernetes 集群。 环境变量: 显示更多 |
布尔值 |
|
要使用的 Kubernetes API 服务器版本。如果未设置,Kubernetes 的开发服务将使用给定类型的最新支持版本。请参阅 https://github.com/dajudge/kindcontainer/blob/master/k8s-versions.json 环境变量: 显示更多 |
字符串 |
|
要使用的风格(kind、k3s 或 api-only)。如果未设置,Kubernetes 的开发服务将设置为:api-only。 环境变量: 显示更多 |
|
|
默认情况下,如果找到 kubeconfig,Kubernetes 的开发服务将不会启动。将此设置为 true 可覆盖 kubeconfig 配置。 环境变量: 显示更多 |
布尔值 |
|
指示 Quarkus 开发服务管理的 Kubernetes 集群是否共享。当共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则会使用它,而不会启动第二个。否则,Kubernetes 的开发服务将启动一个新容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到已启动容器的 当您需要多个共享 Kubernetes 集群时,将使用此属性。 环境变量: 显示更多 |
字符串 |
|
传递给容器的环境变量。 环境变量: 显示更多 |
Map<String,String> |