编辑此页面

Kubernetes 的 Dev Services

Kubernetes 的开发服务会在开发模式和运行测试时自动启动 Kubernetes API 服务器(以及所需的 etcd)。因此,您无需手动启动它。应用程序将自动配置。

支持以下 testcontainerskindk3s 或仅 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 文件中

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-kubernetes-client</artifactId>
</dependency>

并设置 Quarkus 属性来选择集群类型或 kube 版本。

然后,您将能够创建一个 Fabric8 Kubernetes Client 对象,该对象能够执行许多 kube 任务,具体细节请参见此 备忘单

简单的 Bean 示例
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.flavorquarkus.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 集群,可以使用 k3skindk3s 需要以*特权模式*启动容器。kind 测试容器现在支持使用 podman rootless 或 rootfull。

如果未设置 api-version,将使用给定类型的最新版本。否则,版本必须匹配给定类型支持的版本

配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

是否应使用 Kubernetes 的开发服务。(默认为 true)如果为 true 并且未配置 Kubernetes 客户端,则将启动并使用 Kubernetes 集群。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_ENABLED

显示更多

布尔值

true

要使用的 Kubernetes API 服务器版本。如果未设置,Kubernetes 的开发服务将使用给定类型的最新支持版本。请参阅 https://github.com/dajudge/kindcontainer/blob/master/k8s-versions.json

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_API_VERSION

显示更多

字符串

要使用的风格(kind、k3s 或 api-only)。如果未设置,Kubernetes 的开发服务将设置为:api-only。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_FLAVOR

显示更多

kindkind (需要特权 docker)k3sk3s (需要特权 docker)api-only仅 API

默认情况下,如果找到 kubeconfig,Kubernetes 的开发服务将不会启动。将此设置为 true 可覆盖 kubeconfig 配置。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_OVERRIDE_KUBECONFIG

显示更多

布尔值

false

指示 Quarkus 开发服务管理的 Kubernetes 集群是否共享。当共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则会使用它,而不会启动第二个。否则,Kubernetes 的开发服务将启动一个新容器。

发现使用 quarkus-dev-service-kubernetes 标签。该值使用 service-name 属性配置。

容器共享仅在开发模式下使用。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SHARED

显示更多

布尔值

true

附加到已启动容器的 quarkus-dev-service-kubernetes 标签的值。在 shared 设置为 true 时使用此属性。在这种情况下,在启动容器之前,Kubernetes 的开发服务会查找具有设置为指定值的 quarkus-dev-service-kubernetes 标签的容器。如果找到,则使用此容器而不是启动新容器。否则,将启动一个具有设置为指定值的 quarkus-dev-service-kubernetes 标签的新容器。

当您需要多个共享 Kubernetes 集群时,将使用此属性。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SERVICE_NAME

显示更多

字符串

kubernetes

传递给容器的环境变量。

环境变量:QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

显示更多

Map<String,String>

相关内容