apiVersion;
+
+ /**
+ * The flavor to use (kind, s3 or api-only). Default to api-only.
+ */
+ @ConfigItem(defaultValue = "API_ONLY")
+ public Flavor flavor;
+
+ /**
+ * By default, if a kubeconfig is found, dev services for Kubernetes will not start.
+ * Set this to true to override the kubeconfig config.
+ */
+ @ConfigItem(defaultValue = "false")
+ public boolean overrideKubeconfig;
+
+ /**
+ * Indicates if the Kubernetes cluster managed by Quarkus Dev Services is shared.
+ * When shared, Quarkus looks for running containers using label-based service discovery.
+ * If a matching container is found, it is used, and so a second one is not started.
+ * Otherwise, Dev Services for Kubernetes starts a new container.
+ *
+ * The discovery uses the {@code quarkus-dev-service-kubernetes} label.
+ * The value is configured using the {@code service-name} property.
+ *
+ * Container sharing is only used in dev mode.
+ */
+ @ConfigItem(defaultValue = "true")
+ public boolean shared;
+
+ /**
+ * The value of the {@code quarkus-dev-service-kubernetes} label attached to the started container.
+ * This property is used when {@code shared} is set to {@code true}.
+ * In this case, before starting a container, Dev Services for Kubernetes looks for a container with the
+ * {@code quarkus-dev-service-kubernetes} label
+ * set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it
+ * starts a new container with the {@code quarkus-dev-service-kubernetes} label set to the specified value.
+ *
+ * This property is used when you need multiple shared Kubernetes clusters.
+ */
+ @ConfigItem(defaultValue = "kubernetes")
+ public String serviceName;
+
+ public static enum Flavor {
+ /**
+ * kind (needs priviledge docker)
+ */
+ KIND,
+ /**
+ * k3s (needs priviledge docker)
+ */
+ K3S,
+ /**
+ * api only
+ */
+ API_ONLY;
+ }
+}
diff --git a/integration-tests/kubernetes-client-devservices/pom.xml b/integration-tests/kubernetes-client-devservices/pom.xml
new file mode 100644
index 00000000000000..d78c7c04966d5b
--- /dev/null
+++ b/integration-tests/kubernetes-client-devservices/pom.xml
@@ -0,0 +1,118 @@
+
+
+ 4.0.0
+
+ io.quarkus
+ quarkus-integration-tests-parent
+ 999-SNAPSHOT
+ ../pom.xml
+
+ quarkus-integration-test-kubernetes-client-devservices
+ Quarkus - Integration Tests - Kubernetes Client DevService
+
+
+
+ io.quarkus
+ quarkus-kubernetes-client
+
+
+ io.quarkus
+ quarkus-arc
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+
+ io.quarkus
+ quarkus-kubernetes-client-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+ io.quarkus
+ quarkus-arc-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+ maven-surefire-plugin
+
+ true
+
+
+
+ maven-failsafe-plugin
+
+ true
+
+
+
+ io.quarkus
+ quarkus-maven-plugin
+
+
+
+ build
+
+
+
+
+
+
+
+
+
+
+ test-kubernetes-client
+
+
+ test-containers
+
+
+
+
+
+ maven-surefire-plugin
+
+ false
+
+
+
+ maven-failsafe-plugin
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/integration-tests/kubernetes-client-devservices/src/main/resources/application.properties b/integration-tests/kubernetes-client-devservices/src/main/resources/application.properties
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/DevServicesKubernetesITest.java b/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/DevServicesKubernetesITest.java
new file mode 100644
index 00000000000000..a30211e97fa92d
--- /dev/null
+++ b/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/DevServicesKubernetesITest.java
@@ -0,0 +1,27 @@
+package io.quarkus.kubernetes.client.devservices.it;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.quarkus.kubernetes.client.devservices.it.profiles.DevServiceKubernetes;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+
+@QuarkusTest
+@TestProfile(DevServiceKubernetes.class)
+public class DevServicesKubernetesITest {
+
+ @Inject
+ KubernetesClient kubernetesClient;
+
+ @Test
+ @DisplayName("given kubernetes container must communicate with it and return its version")
+ public void shouldReturnAllKeys() {
+ Assertions.assertEquals("v" + DevServiceKubernetes.API_VERSION,
+ kubernetesClient.getKubernetesVersion().getGitVersion());
+ }
+}
diff --git a/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/profiles/DevServiceKubernetes.java b/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/profiles/DevServiceKubernetes.java
new file mode 100644
index 00000000000000..df99a5694fefab
--- /dev/null
+++ b/integration-tests/kubernetes-client-devservices/src/test/java/io/quarkus/kubernetes/client/devservices/it/profiles/DevServiceKubernetes.java
@@ -0,0 +1,17 @@
+package io.quarkus.kubernetes.client.devservices.it.profiles;
+
+import java.util.Collections;
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+public class DevServiceKubernetes implements QuarkusTestProfile {
+
+ public static final String API_VERSION = "1.24.1";
+
+ @Override
+ public Map getConfigOverrides() {
+
+ return Collections.singletonMap("quarkus.kubernetes-client.devservices.api-version", API_VERSION);
+ }
+}
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 99dbb209ec2b29..558f3223547a01 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -245,6 +245,7 @@
container-image
kubernetes
kubernetes-client
+ kubernetes-client-devservices
kubernetes-service-binding-jdbc
kubernetes-service-binding-reactive
openshift-client