You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gf...@apache.org on 2024/11/07 15:11:10 UTC
(camel) branch main updated: [CAMEL-21392] Add support for --cluster-type=k3s
This is an automated email from the ASF dual-hosted git repository.
gfournier pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 2485f8e193d [CAMEL-21392] Add support for --cluster-type=k3s
2485f8e193d is described below
commit 2485f8e193dccfd136f99754f0ed622b7235665a
Author: Thomas Diesler <td...@redhat.com>
AuthorDate: Tue Oct 29 07:03:32 2024 +0100
[CAMEL-21392] Add support for --cluster-type=k3s
---
.../modules/ROOT/pages/camel-jbang-kubernetes.adoc | 8 ++++++
.../resources/templates/main-kubernetes-pom.tmpl | 4 ++-
.../templates/spring-boot-kubernetes-pom.tmpl | 4 ++-
.../camel-jbang-plugin-kubernetes/pom.xml | 12 +++++++++
.../core/commands/kubernetes/ClusterType.java | 1 +
.../core/commands/kubernetes/KubernetesExport.java | 24 ++++++++++++++----
.../kubernetes/traits/DeploymentTrait.java | 12 +++++++++
.../commands/kubernetes/traits/TraitContext.java | 9 ++-----
.../kubernetes/traits/model/Container.java | 29 +++++++++++++++++++++-
9 files changed, 88 insertions(+), 15 deletions(-)
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
index 8a9cddb0c8c..e7c31814e82 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
@@ -225,6 +225,14 @@ The container trait is able to customize the container specification with follow
| PullPolicy
| The pull policy: Always\|Never\|IfNotPresent
+| container.image-pull-secrets
+| string[]
+| The pull secrets for private registries
+
+| container.image-push
+| boolean
+| Enable image push to the registry
+
| container.request-cpu
| string
| The minimum amount of CPU required.
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl
index 9939cd069e8..ec7af0012c4 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl
@@ -129,12 +129,13 @@
<version>${camel.main.jkube.version}</version>
<configuration>
<imagePullPolicy>${camel.main.kubernetes.image-pull-policy}</imagePullPolicy>
- <buildStrategy>docker</buildStrategy>
+ <buildStrategy>${jkube.build.strategy}</buildStrategy>
<images>
<image>
<name>${camel.main.kubernetes.image-name}</name>
<build>
<from>eclipse-temurin:{{ .JavaVersion }}</from>
+ <!-- Supported only when using the jib build strategy -->
<createImageOptions>
<platform>linux/amd64</platform>
<platform>linux/arm64</platform>
@@ -158,6 +159,7 @@
<goals>
<goal>build</goal>
<goal>resource</goal>
+ <goal>push</goal>
</goals>
<phase>package</phase>
</execution>
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl
index cc7e3572ae7..902133f8d10 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl
@@ -80,12 +80,13 @@
<version>${camel.springboot.jkube.version}</version>
<configuration>
<imagePullPolicy>${camel.springboot.kubernetes.image-pull-policy}</imagePullPolicy>
- <buildStrategy>docker</buildStrategy>
+ <buildStrategy>${jkube.build.strategy}</buildStrategy>
<images>
<image>
<name>${camel.springboot.kubernetes.image-name}</name>
<build>
<from>eclipse-temurin:{{ .JavaVersion }}</from>
+ <!-- Supported only when using the jib build strategy -->
<createImageOptions>
<platform>linux/amd64</platform>
<platform>linux/arm64</platform>
@@ -109,6 +110,7 @@
<goals>
<goal>build</goal>
<goal>resource</goal>
+ <goal>push</goal>
</goals>
<phase>package</phase>
</execution>
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/pom.xml b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/pom.xml
index c65471c737b..95072a9fe9e 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/pom.xml
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/pom.xml
@@ -47,6 +47,18 @@
<artifactId>camel-jbang-core</artifactId>
</dependency>
+ <!-- Needed for TLS access to private registries -->
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk18on</artifactId>
+ <version>${bouncycastle-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcpkix-jdk18on</artifactId>
+ <version>${bouncycastle-version}</version>
+ </dependency>
+
<!-- Kubernetes -->
<dependency>
<groupId>io.fabric8</groupId>
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/ClusterType.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/ClusterType.java
index adc4ed98bac..c30ece52e34 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/ClusterType.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/ClusterType.java
@@ -26,6 +26,7 @@ public enum ClusterType {
KUBERNETES,
OPENSHIFT,
KIND,
+ K3S,
MINIKUBE;
public static ClusterType fromName(String name) {
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
index d2c9b2bc0e5..1cf5d9fa241 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
@@ -105,7 +105,7 @@ public class KubernetesExport extends Export {
description = "The image registry group used to push images to.")
protected String imageGroup;
- @CommandLine.Option(names = { "--image-builder" },
+ @CommandLine.Option(names = { "--image-builder" }, defaultValue = "jib",
description = "The image builder used to build the container image (e.g. docker, jib, podman, s2i).")
protected String imageBuilder;
@@ -187,6 +187,9 @@ public class KubernetesExport extends Export {
propPrefix = runtime.runtime();
}
+ boolean useQuarkusPlugin = runtime == RuntimeType.quarkus;
+ boolean useJKubePlugin = !useQuarkusPlugin;
+
// Resolve image group and registry
String resolvedImageGroup = resolveImageGroup();
if (resolvedImageGroup != null) {
@@ -194,7 +197,7 @@ public class KubernetesExport extends Export {
}
String resolvedImageRegistry = resolveImageRegistry();
- if (resolvedImageRegistry != null) {
+ if (useQuarkusPlugin && resolvedImageRegistry != null) {
var allowInsecure = resolvedImageRegistry.startsWith("localhost");
buildProperties.add("%s.container-image.registry=%s".formatted(propPrefix, resolvedImageRegistry));
buildProperties.add("%s.container-image.insecure=%b".formatted(propPrefix, allowInsecure));
@@ -289,6 +292,17 @@ public class KubernetesExport extends Export {
buildProperties.add("%s.kubernetes.image-pull-policy=%s".formatted(propPrefix, imagePullPolicy));
}
+ if (useJKubePlugin) {
+ if ("docker".equals(imageBuilder) || "jib".equals(imageBuilder)) {
+ buildProperties.add("jkube.build.strategy=%s".formatted(imageBuilder));
+ }
+ if (resolvedImageRegistry != null) {
+ buildProperties.add("jkube.docker.push.registry=%s".formatted(resolvedImageRegistry));
+ }
+ var skipPush = !container.getImagePush();
+ buildProperties.add("jkube.skip.push=%b".formatted(skipPush));
+ }
+
// Runtime specific for Main
if (runtime == RuntimeType.main) {
addDependencies("org.apache.camel:camel-health",
@@ -296,7 +310,7 @@ public class KubernetesExport extends Export {
}
// Runtime specific for Quarkus
- if (runtime == RuntimeType.quarkus) {
+ if (useQuarkusPlugin) {
// Quarkus specific dependencies
if (ClusterType.OPENSHIFT.isEqualTo(clusterType)) {
@@ -325,8 +339,8 @@ public class KubernetesExport extends Export {
buildProperties.add("quarkus.container-image.build=true");
}
- // SpringBoot Runtime specific
- if (runtime == RuntimeType.springBoot || runtime == RuntimeType.main) {
+ // SpringBoot/Main Runtime specific
+ if (useJKubePlugin) {
if (ClusterType.OPENSHIFT.isEqualTo(clusterType)) {
buildProperties.add("%s.jkube.maven.plugin=%s".formatted(propPrefix, "openshift-maven-plugin"));
} else {
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/DeploymentTrait.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/DeploymentTrait.java
index f705ed75960..78d62f0181a 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/DeploymentTrait.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/DeploymentTrait.java
@@ -17,10 +17,13 @@
package org.apache.camel.dsl.jbang.core.commands.kubernetes.traits;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
import io.fabric8.kubernetes.api.model.LabelSelectorBuilder;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
+import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.model.Container;
import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.model.Traits;
public class DeploymentTrait extends BaseTrait {
@@ -46,6 +49,15 @@ public class DeploymentTrait extends BaseTrait {
.build())
.endSpec();
+ Container containerTrait = Optional.ofNullable(traitConfig.getContainer()).orElseGet(Container::new);
+ Optional.ofNullable(containerTrait.getImagePullSecrets()).orElseGet(List::of).forEach(sec -> deployment.editSpec()
+ .editOrNewTemplate()
+ .editOrNewSpec()
+ .addNewImagePullSecret(sec)
+ .endSpec()
+ .endTemplate()
+ .endSpec());
+
if (context.getServiceAccount() != null) {
deployment.editSpec()
.editOrNewTemplate()
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/TraitContext.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/TraitContext.java
index 6f54691f026..90569eb5bd6 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/TraitContext.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/TraitContext.java
@@ -92,8 +92,6 @@ public class TraitContext {
/**
* Adds a resource that should be created as part of the Camel app.
- *
- * @param resource
*/
public void add(VisitableBuilder<?, ?> resource) {
resourceRegistry.add(resource);
@@ -235,9 +233,8 @@ public class TraitContext {
/**
* Performs source metadata inspection and uses local cache to not inspect the same source over and over again.
*
- * @param source the source to inspect and create the metadata from.
- * @return the metadata holding information such as components, endpoints, languages used with the source.
- * @throws Exception
+ * @param source the source to inspect and create the metadata from.
+ * @return the metadata holding information such as components, endpoints, languages used with the source.
*/
public SourceMetadata inspectMetaData(Source source) throws Exception {
if (sourceMetadata.containsKey(source.name())) {
@@ -252,8 +249,6 @@ public class TraitContext {
/**
* Inspect all sources in this context and retrieve the source metadata. Uses internal cache for sources that have
* already been inspected.
- *
- * @return
*/
public List<SourceMetadata> getSourceMetadata() {
List<SourceMetadata> answer = new ArrayList<>();
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java
index d0b72f78e44..ffd92bf2b47 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java
@@ -30,7 +30,8 @@ import com.fasterxml.jackson.annotation.Nulls;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"allowPrivilegeEscalation", "auto", "capabilitiesAdd", "capabilitiesDrop", "enabled", "expose",
- "image", "imagePullPolicy", "limitCPU", "limitMemory", "name", "port", "portName", "requestCPU", "requestMemory",
+ "image", "imagePullPolicy", "imagePullSecrets", "limitCPU", "limitMemory", "name", "port", "portName", "requestCPU",
+ "requestMemory",
"runAsNonRoot", "runAsUser", "seccompProfileType", "servicePort", "servicePortName" })
public class Container {
@JsonProperty("allowPrivilegeEscalation")
@@ -73,6 +74,16 @@ public class Container {
@JsonSetter(
nulls = Nulls.SKIP)
private ImagePullPolicy imagePullPolicy;
+ @JsonProperty("imagePullSecrets")
+ @JsonPropertyDescription("The pull secrets for private registries")
+ @JsonSetter(
+ nulls = Nulls.SKIP)
+ private List<String> imagePullSecrets;
+ @JsonProperty("imagePush")
+ @JsonPropertyDescription("Enable image push to the registry")
+ @JsonSetter(
+ nulls = Nulls.SKIP)
+ private boolean imagePush;
@JsonProperty("limitCPU")
@JsonPropertyDescription("The maximum amount of CPU to be provided (default 500 millicores).")
@JsonSetter(
@@ -201,6 +212,22 @@ public class Container {
this.imagePullPolicy = imagePullPolicy;
}
+ public List<String> getImagePullSecrets() {
+ return imagePullSecrets;
+ }
+
+ public void setImagePullSecrets(List<String> imagePullSecret) {
+ this.imagePullSecrets = imagePullSecret;
+ }
+
+ public boolean getImagePush() {
+ return imagePush;
+ }
+
+ public void setImagePush(boolean imagePush) {
+ this.imagePush = imagePush;
+ }
+
public String getLimitCPU() {
return this.limitCPU;
}