You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2023/05/16 08:02:08 UTC
[camel-k] 04/07: feat(trait): builder pod resources config
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 91df85c10d2369ae3cc45fce5b4dd4d83c9bd2fc
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed May 10 12:14:54 2023 +0200
feat(trait): builder pod resources config
* Enabled resource configuration for builder pod
* Default resource configuration when Quarkus native build
Closes #4177
---
.../duck/client/internalclientset/fake/register.go | 14 ++---
.../client/internalclientset/scheme/register.go | 14 ++---
config/crd/bases/camel.apache.org_builds.yaml | 33 +++++++++--
.../bases/camel.apache.org_integrationkits.yaml | 16 ++++++
.../camel.apache.org_integrationplatforms.yaml | 56 ++++++++++++++++---
.../crd/bases/camel.apache.org_integrations.yaml | 16 ++++++
.../bases/camel.apache.org_kameletbindings.yaml | 16 ++++++
config/crd/bases/camel.apache.org_pipes.yaml | 16 ++++++
docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 44 ++++++++++++---
docs/modules/traits/pages/builder.adoc | 16 ++++++
helm/camel-k/crds/crd-build.yaml | 33 +++++++++--
helm/camel-k/crds/crd-integration-kit.yaml | 16 ++++++
helm/camel-k/crds/crd-integration-platform.yaml | 56 ++++++++++++++++---
helm/camel-k/crds/crd-integration.yaml | 16 ++++++
helm/camel-k/crds/crd-kamelet-binding.yaml | 16 ++++++
helm/camel-k/crds/crd-pipe.yaml | 16 ++++++
pkg/apis/camel/v1/build_types.go | 4 +-
pkg/apis/camel/v1/common_types.go | 8 +--
pkg/apis/camel/v1/trait/builder.go | 8 +++
pkg/apis/camel/v1/zz_generated.deepcopy.go | 1 +
.../camel/applyconfiguration/camel/v1/buildspec.go | 21 ++++---
.../camel/clientset/versioned/fake/register.go | 14 ++---
.../camel/clientset/versioned/scheme/register.go | 14 ++---
pkg/controller/build/build_controller.go | 4 +-
pkg/controller/build/build_monitor_test.go | 4 +-
pkg/controller/build/build_pod.go | 38 +++++++++++++
pkg/controller/integrationkit/build.go | 11 ++--
pkg/resources/resources.go | 8 +--
pkg/trait/builder.go | 13 +++++
pkg/trait/container.go | 65 +++++++++-------------
pkg/trait/quarkus.go | 5 +-
pkg/util/kubernetes/factory.go | 13 +++++
pkg/util/kubernetes/factory_test.go | 16 ++++++
resources/traits.yaml | 16 ++++++
34 files changed, 520 insertions(+), 137 deletions(-)
diff --git a/addons/strimzi/duck/client/internalclientset/fake/register.go b/addons/strimzi/duck/client/internalclientset/fake/register.go
index 53a4309e7..e6ac15499 100644
--- a/addons/strimzi/duck/client/internalclientset/fake/register.go
+++ b/addons/strimzi/duck/client/internalclientset/fake/register.go
@@ -38,14 +38,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
-// import (
-// "k8s.io/client-go/kubernetes"
-// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-// )
+// import (
+// "k8s.io/client-go/kubernetes"
+// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+// )
//
-// kclientset, _ := kubernetes.NewForConfig(c)
-// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+// kclientset, _ := kubernetes.NewForConfig(c)
+// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
diff --git a/addons/strimzi/duck/client/internalclientset/scheme/register.go b/addons/strimzi/duck/client/internalclientset/scheme/register.go
index 11f233b92..6abeca247 100644
--- a/addons/strimzi/duck/client/internalclientset/scheme/register.go
+++ b/addons/strimzi/duck/client/internalclientset/scheme/register.go
@@ -38,14 +38,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
-// import (
-// "k8s.io/client-go/kubernetes"
-// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-// )
+// import (
+// "k8s.io/client-go/kubernetes"
+// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+// )
//
-// kclientset, _ := kubernetes.NewForConfig(c)
-// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+// kclientset, _ := kubernetes.NewForConfig(c)
+// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
diff --git a/config/crd/bases/camel.apache.org_builds.yaml b/config/crd/bases/camel.apache.org_builds.yaml
index 58c050154..70e54e1dd 100644
--- a/config/crd/bases/camel.apache.org_builds.yaml
+++ b/config/crd/bases/camel.apache.org_builds.yaml
@@ -79,6 +79,33 @@ spec:
spec:
description: BuildSpec defines the Build operation to be executed
properties:
+ configuration:
+ description: The configuration that should be used to perform the
+ Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only used for
+ `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only used for
+ `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ type: object
maxRunningBuilds:
description: the maximum amount of parallel running builds started
by this operator instance
@@ -88,12 +115,6 @@ spec:
description: The namespace where to run the builder Pod (must be the
same of the operator in charge of this Build reconciliation).
type: string
- strategy:
- description: The strategy that should be used to perform the Build.
- enum:
- - routine
- - pod
- type: string
tasks:
description: The sequence of Build tasks to be performed as part of
the Build execution.
diff --git a/config/crd/bases/camel.apache.org_integrationkits.yaml b/config/crd/bases/camel.apache.org_integrationkits.yaml
index eec22bb01..530927802 100644
--- a/config/crd/bases/camel.apache.org_integrationkits.yaml
+++ b/config/crd/bases/camel.apache.org_integrationkits.yaml
@@ -203,12 +203,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index 44c7d72c2..09ca16fef 100644
--- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -105,16 +105,20 @@ spec:
container image
properties:
limitCPU:
- description: The maximum amount of CPU required.
+ description: The maximum amount of CPU required. Only used
+ for `pod` strategy
type: string
limitMemory:
- description: The maximum amount of memory required.
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
type: string
requestCPU:
- description: The minimum amount of CPU required.
+ description: The minimum amount of CPU required. Only used
+ for `pod` strategy
type: string
requestMemory:
- description: The minimum amount of memory required.
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
type: string
strategy:
description: the strategy to adopt
@@ -442,12 +446,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
@@ -1708,16 +1728,20 @@ spec:
container image
properties:
limitCPU:
- description: The maximum amount of CPU required.
+ description: The maximum amount of CPU required. Only used
+ for `pod` strategy
type: string
limitMemory:
- description: The maximum amount of memory required.
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
type: string
requestCPU:
- description: The minimum amount of CPU required.
+ description: The minimum amount of CPU required. Only used
+ for `pod` strategy
type: string
requestMemory:
- description: The minimum amount of memory required.
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
type: string
strategy:
description: the strategy to adopt
@@ -2093,12 +2117,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/config/crd/bases/camel.apache.org_integrations.yaml b/config/crd/bases/camel.apache.org_integrations.yaml
index 693220cb5..b29aac0b2 100644
--- a/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/config/crd/bases/camel.apache.org_integrations.yaml
@@ -6186,12 +6186,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/config/crd/bases/camel.apache.org_kameletbindings.yaml b/config/crd/bases/camel.apache.org_kameletbindings.yaml
index 68234f1a3..5707985ca 100644
--- a/config/crd/bases/camel.apache.org_kameletbindings.yaml
+++ b/config/crd/bases/camel.apache.org_kameletbindings.yaml
@@ -6461,12 +6461,28 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the
build task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/config/crd/bases/camel.apache.org_pipes.yaml b/config/crd/bases/camel.apache.org_pipes.yaml
index 103ac83fc..c1f04c4e2 100644
--- a/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/config/crd/bases/camel.apache.org_pipes.yaml
@@ -6458,12 +6458,28 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the
build task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index 8c72fa7ed..4c8e52315 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -500,6 +500,7 @@ BuildConditionType --
*Appears on:*
+* <<#_camel_apache_org_v1_BuildSpec, BuildSpec>>
* <<#_camel_apache_org_v1_IntegrationPlatformBuildSpec, IntegrationPlatformBuildSpec>>
BuildConfiguration represent the configuration required to build the runtime
@@ -521,28 +522,28 @@ string
|
-The minimum amount of CPU required.
+The minimum amount of CPU required. Only used for `pod` strategy
|`requestMemory` +
string
|
-The minimum amount of memory required.
+The minimum amount of memory required. Only used for `pod` strategy
|`limitCPU` +
string
|
-The maximum amount of CPU required.
+The maximum amount of CPU required. Only used for `pod` strategy
|`limitMemory` +
string
|
-The maximum amount of memory required.
+The maximum amount of memory required. Only used for `pod` strategy
|===
@@ -578,12 +579,12 @@ BuildSpec defines the Build operation to be executed
The sequence of Build tasks to be performed as part of the Build execution.
-|`strategy` +
-*xref:#_camel_apache_org_v1_BuildStrategy[BuildStrategy]*
+|`configuration` +
+*xref:#_camel_apache_org_v1_BuildConfiguration[BuildConfiguration]*
|
-The strategy that should be used to perform the Build.
+The configuration that should be used to perform the Build.
|`toolImage` +
string
@@ -721,7 +722,6 @@ https://github.com/OAI/OpenAPI-Specification/issues/845
*Appears on:*
* <<#_camel_apache_org_v1_BuildConfiguration, BuildConfiguration>>
-* <<#_camel_apache_org_v1_BuildSpec, BuildSpec>>
BuildStrategy specifies how the Build should be executed.
It will trigger a Maven process (either as an Operator routine or Kubernetes Pod execution) that
@@ -5317,6 +5317,34 @@ string
The strategy to use, either `pod` or `routine` (default routine)
+|`requestCPU` +
+string
+|
+
+
+When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+
+|`requestMemory` +
+string
+|
+
+
+When using `pod` strategy, the minimum amount of memory required by the pod builder.
+
+|`limitCPU` +
+string
+|
+
+
+When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+
+|`limitMemory` +
+string
+|
+
+
+When using `pod` strategy, the maximum amount of memory required by the pod builder.
+
|===
diff --git a/docs/modules/traits/pages/builder.adoc b/docs/modules/traits/pages/builder.adoc
index 6bf2975cf..49aa11fe5 100755
--- a/docs/modules/traits/pages/builder.adoc
+++ b/docs/modules/traits/pages/builder.adoc
@@ -40,6 +40,22 @@ The following configuration options are available:
| string
| The strategy to use, either `pod` or `routine` (default routine)
+| builder.request-cpu
+| string
+| When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+
+| builder.request-memory
+| string
+| When using `pod` strategy, the minimum amount of memory required by the pod builder.
+
+| builder.limit-cpu
+| string
+| When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+
+| builder.limit-memory
+| string
+| When using `pod` strategy, the maximum amount of memory required by the pod builder.
+
|===
// End of autogenerated code - DO NOT EDIT! (configuration)
diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml
index 58c050154..70e54e1dd 100644
--- a/helm/camel-k/crds/crd-build.yaml
+++ b/helm/camel-k/crds/crd-build.yaml
@@ -79,6 +79,33 @@ spec:
spec:
description: BuildSpec defines the Build operation to be executed
properties:
+ configuration:
+ description: The configuration that should be used to perform the
+ Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only used for
+ `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only used for
+ `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ type: object
maxRunningBuilds:
description: the maximum amount of parallel running builds started
by this operator instance
@@ -88,12 +115,6 @@ spec:
description: The namespace where to run the builder Pod (must be the
same of the operator in charge of this Build reconciliation).
type: string
- strategy:
- description: The strategy that should be used to perform the Build.
- enum:
- - routine
- - pod
- type: string
tasks:
description: The sequence of Build tasks to be performed as part of
the Build execution.
diff --git a/helm/camel-k/crds/crd-integration-kit.yaml b/helm/camel-k/crds/crd-integration-kit.yaml
index eec22bb01..530927802 100644
--- a/helm/camel-k/crds/crd-integration-kit.yaml
+++ b/helm/camel-k/crds/crd-integration-kit.yaml
@@ -203,12 +203,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml
index 44c7d72c2..09ca16fef 100644
--- a/helm/camel-k/crds/crd-integration-platform.yaml
+++ b/helm/camel-k/crds/crd-integration-platform.yaml
@@ -105,16 +105,20 @@ spec:
container image
properties:
limitCPU:
- description: The maximum amount of CPU required.
+ description: The maximum amount of CPU required. Only used
+ for `pod` strategy
type: string
limitMemory:
- description: The maximum amount of memory required.
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
type: string
requestCPU:
- description: The minimum amount of CPU required.
+ description: The minimum amount of CPU required. Only used
+ for `pod` strategy
type: string
requestMemory:
- description: The minimum amount of memory required.
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
type: string
strategy:
description: the strategy to adopt
@@ -442,12 +446,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
@@ -1708,16 +1728,20 @@ spec:
container image
properties:
limitCPU:
- description: The maximum amount of CPU required.
+ description: The maximum amount of CPU required. Only used
+ for `pod` strategy
type: string
limitMemory:
- description: The maximum amount of memory required.
+ description: The maximum amount of memory required. Only used
+ for `pod` strategy
type: string
requestCPU:
- description: The minimum amount of CPU required.
+ description: The minimum amount of CPU required. Only used
+ for `pod` strategy
type: string
requestMemory:
- description: The minimum amount of memory required.
+ description: The minimum amount of memory required. Only used
+ for `pod` strategy
type: string
strategy:
description: the strategy to adopt
@@ -2093,12 +2117,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml
index 693220cb5..b29aac0b2 100644
--- a/helm/camel-k/crds/crd-integration.yaml
+++ b/helm/camel-k/crds/crd-integration.yaml
@@ -6186,12 +6186,28 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the build
task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml
index 68234f1a3..5707985ca 100644
--- a/helm/camel-k/crds/crd-kamelet-binding.yaml
+++ b/helm/camel-k/crds/crd-kamelet-binding.yaml
@@ -6461,12 +6461,28 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the
build task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml
index 103ac83fc..c1f04c4e2 100644
--- a/helm/camel-k/crds/crd-pipe.yaml
+++ b/helm/camel-k/crds/crd-pipe.yaml
@@ -6458,12 +6458,28 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ limitCPU:
+ description: When using `pod` strategy, the maximum amount
+ of CPU required by the pod builder.
+ type: string
+ limitMemory:
+ description: When using `pod` strategy, the maximum amount
+ of memory required by the pod builder.
+ type: string
properties:
description: A list of properties to be provided to the
build task
items:
type: string
type: array
+ requestCPU:
+ description: When using `pod` strategy, the minimum amount
+ of CPU required by the pod builder.
+ type: string
+ requestMemory:
+ description: When using `pod` strategy, the minimum amount
+ of memory required by the pod builder.
+ type: string
strategy:
description: The strategy to use, either `pod` or `routine`
(default routine)
diff --git a/pkg/apis/camel/v1/build_types.go b/pkg/apis/camel/v1/build_types.go
index 2618c4d64..4e84cd899 100644
--- a/pkg/apis/camel/v1/build_types.go
+++ b/pkg/apis/camel/v1/build_types.go
@@ -29,8 +29,8 @@ import (
type BuildSpec struct {
// The sequence of Build tasks to be performed as part of the Build execution.
Tasks []Task `json:"tasks,omitempty"`
- // The strategy that should be used to perform the Build.
- Strategy BuildStrategy `json:"strategy,omitempty"`
+ // The configuration that should be used to perform the Build.
+ Configuration BuildConfiguration `json:"configuration,omitempty"`
// The container image to be used to run the build.
ToolImage string `json:"toolImage,omitempty"`
// The namespace where to run the builder Pod (must be the same of the operator in charge of this Build reconciliation).
diff --git a/pkg/apis/camel/v1/common_types.go b/pkg/apis/camel/v1/common_types.go
index 9a3b90781..d7ef30ad0 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -39,13 +39,13 @@ const (
type BuildConfiguration struct {
// the strategy to adopt
Strategy BuildStrategy `property:"strategy" json:"strategy,omitempty"`
- // The minimum amount of CPU required.
+ // The minimum amount of CPU required. Only used for `pod` strategy
RequestCPU string `property:"request-cpu" json:"requestCPU,omitempty"`
- // The minimum amount of memory required.
+ // The minimum amount of memory required. Only used for `pod` strategy
RequestMemory string `property:"request-memory" json:"requestMemory,omitempty"`
- // The maximum amount of CPU required.
+ // The maximum amount of CPU required. Only used for `pod` strategy
LimitCPU string `property:"limit-cpu" json:"limitCPU,omitempty"`
- // The maximum amount of memory required.
+ // The maximum amount of memory required. Only used for `pod` strategy
LimitMemory string `property:"limit-memory" json:"limitMemory,omitempty"`
}
diff --git a/pkg/apis/camel/v1/trait/builder.go b/pkg/apis/camel/v1/trait/builder.go
index f8e2b8a41..4f62bc0b9 100644
--- a/pkg/apis/camel/v1/trait/builder.go
+++ b/pkg/apis/camel/v1/trait/builder.go
@@ -29,4 +29,12 @@ type BuilderTrait struct {
Properties []string `property:"properties" json:"properties,omitempty"`
// The strategy to use, either `pod` or `routine` (default routine)
Strategy string `property:"strategy" json:"strategy,omitempty"`
+ // When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+ RequestCPU string `property:"request-cpu" json:"requestCPU,omitempty"`
+ // When using `pod` strategy, the minimum amount of memory required by the pod builder.
+ RequestMemory string `property:"request-memory" json:"requestMemory,omitempty"`
+ // When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+ LimitCPU string `property:"limit-cpu" json:"limitCPU,omitempty"`
+ // When using `pod` strategy, the maximum amount of memory required by the pod builder.
+ LimitMemory string `property:"limit-memory" json:"limitMemory,omitempty"`
}
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index efd780e1a..b34d8ed9d 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -184,6 +184,7 @@ func (in *BuildSpec) DeepCopyInto(out *BuildSpec) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
+ out.Configuration = in.Configuration
out.Timeout = in.Timeout
}
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildspec.go b/pkg/client/camel/applyconfiguration/camel/v1/buildspec.go
index 6ebf7927c..83a691a8a 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/buildspec.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/buildspec.go
@@ -20,19 +20,18 @@ limitations under the License.
package v1
import (
- camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// BuildSpecApplyConfiguration represents an declarative configuration of the BuildSpec type for use
// with apply.
type BuildSpecApplyConfiguration struct {
- Tasks []TaskApplyConfiguration `json:"tasks,omitempty"`
- Strategy *camelv1.BuildStrategy `json:"strategy,omitempty"`
- ToolImage *string `json:"toolImage,omitempty"`
- BuilderPodNamespace *string `json:"operatorNamespace,omitempty"`
- Timeout *metav1.Duration `json:"timeout,omitempty"`
- MaxRunningBuilds *int32 `json:"maxRunningBuilds,omitempty"`
+ Tasks []TaskApplyConfiguration `json:"tasks,omitempty"`
+ Configuration *BuildConfigurationApplyConfiguration `json:"configuration,omitempty"`
+ ToolImage *string `json:"toolImage,omitempty"`
+ BuilderPodNamespace *string `json:"operatorNamespace,omitempty"`
+ Timeout *metav1.Duration `json:"timeout,omitempty"`
+ MaxRunningBuilds *int32 `json:"maxRunningBuilds,omitempty"`
}
// BuildSpecApplyConfiguration constructs an declarative configuration of the BuildSpec type for use with
@@ -54,11 +53,11 @@ func (b *BuildSpecApplyConfiguration) WithTasks(values ...*TaskApplyConfiguratio
return b
}
-// WithStrategy sets the Strategy field in the declarative configuration to the given value
+// WithConfiguration sets the Configuration field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Strategy field is set to the value of the last call.
-func (b *BuildSpecApplyConfiguration) WithStrategy(value camelv1.BuildStrategy) *BuildSpecApplyConfiguration {
- b.Strategy = &value
+// If called multiple times, the Configuration field is set to the value of the last call.
+func (b *BuildSpecApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *BuildSpecApplyConfiguration {
+ b.Configuration = value
return b
}
diff --git a/pkg/client/camel/clientset/versioned/fake/register.go b/pkg/client/camel/clientset/versioned/fake/register.go
index 249a2b9e3..d55e6d595 100644
--- a/pkg/client/camel/clientset/versioned/fake/register.go
+++ b/pkg/client/camel/clientset/versioned/fake/register.go
@@ -40,14 +40,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
-// import (
-// "k8s.io/client-go/kubernetes"
-// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-// )
+// import (
+// "k8s.io/client-go/kubernetes"
+// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+// )
//
-// kclientset, _ := kubernetes.NewForConfig(c)
-// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+// kclientset, _ := kubernetes.NewForConfig(c)
+// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
diff --git a/pkg/client/camel/clientset/versioned/scheme/register.go b/pkg/client/camel/clientset/versioned/scheme/register.go
index 9366fb20c..493d56e4c 100644
--- a/pkg/client/camel/clientset/versioned/scheme/register.go
+++ b/pkg/client/camel/clientset/versioned/scheme/register.go
@@ -40,14 +40,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
-// import (
-// "k8s.io/client-go/kubernetes"
-// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
-// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
-// )
+// import (
+// "k8s.io/client-go/kubernetes"
+// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+// )
//
-// kclientset, _ := kubernetes.NewForConfig(c)
-// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+// kclientset, _ := kubernetes.NewForConfig(c)
+// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
diff --git a/pkg/controller/build/build_controller.go b/pkg/controller/build/build_controller.go
index 1c08e8a95..13c8e1008 100644
--- a/pkg/controller/build/build_controller.go
+++ b/pkg/controller/build/build_controller.go
@@ -146,7 +146,7 @@ func (r *reconcileBuild) Reconcile(ctx context.Context, request reconcile.Reques
maxRunningBuilds: instance.Spec.MaxRunningBuilds,
}
- switch instance.Spec.Strategy {
+ switch instance.Spec.Configuration.Strategy {
case v1.BuildStrategyPod:
actions = []Action{
newInitializePodAction(r.reader),
@@ -209,7 +209,7 @@ func (r *reconcileBuild) Reconcile(ctx context.Context, request reconcile.Reques
return reconcile.Result{RequeueAfter: 5 * time.Second}, nil
}
- if target.Spec.Strategy == v1.BuildStrategyPod &&
+ if target.Spec.Configuration.Strategy == v1.BuildStrategyPod &&
(target.Status.Phase == v1.BuildPhasePending || target.Status.Phase == v1.BuildPhaseRunning) {
// Requeue running Build to poll Pod and signal timeout
return reconcile.Result{RequeueAfter: 1 * time.Second}, nil
diff --git a/pkg/controller/build/build_monitor_test.go b/pkg/controller/build/build_monitor_test.go
index aace7b647..51381b46d 100644
--- a/pkg/controller/build/build_monitor_test.go
+++ b/pkg/controller/build/build_monitor_test.go
@@ -228,7 +228,9 @@ func newBuildWithLayoutInPhase(namespace string, name string, layout string, pha
},
},
Spec: v1.BuildSpec{
- Strategy: v1.BuildStrategyRoutine,
+ Configuration: v1.BuildConfiguration{
+ Strategy: v1.BuildStrategyRoutine,
+ },
ToolImage: "camel:latest",
BuilderPodNamespace: "ns",
Tasks: []v1.Task{},
diff --git a/pkg/controller/build/build_pod.go b/pkg/controller/build/build_pod.go
index fe51dcde8..da25ab3f0 100644
--- a/pkg/controller/build/build_pod.go
+++ b/pkg/controller/build/build_pod.go
@@ -165,9 +165,47 @@ func newBuildPod(ctx context.Context, c ctrl.Reader, build *v1.Build) (*corev1.P
pod.Spec.Containers = pod.Spec.InitContainers[len(pod.Spec.InitContainers)-1 : len(pod.Spec.InitContainers)]
pod.Spec.InitContainers = pod.Spec.InitContainers[:len(pod.Spec.InitContainers)-1]
+ if err := configureResources(build.Spec.Configuration, &pod.Spec.Containers[0]); err != nil {
+ return pod, err
+ }
+
return pod, nil
}
+func configureResources(conf v1.BuildConfiguration, container *corev1.Container) error {
+ requestsList := container.Resources.Requests
+ limitsList := container.Resources.Limits
+ var err error
+ if requestsList == nil {
+ requestsList = make(corev1.ResourceList)
+ }
+ if limitsList == nil {
+ limitsList = make(corev1.ResourceList)
+ }
+
+ requestsList, err = kubernetes.ConfigureResource(conf.RequestCPU, requestsList, corev1.ResourceCPU)
+ if err != nil {
+ return err
+ }
+ requestsList, err = kubernetes.ConfigureResource(conf.RequestMemory, requestsList, corev1.ResourceMemory)
+ if err != nil {
+ return err
+ }
+ limitsList, err = kubernetes.ConfigureResource(conf.LimitCPU, limitsList, corev1.ResourceCPU)
+ if err != nil {
+ return err
+ }
+ limitsList, err = kubernetes.ConfigureResource(conf.LimitMemory, limitsList, corev1.ResourceMemory)
+ if err != nil {
+ return err
+ }
+
+ container.Resources.Requests = requestsList
+ container.Resources.Limits = limitsList
+
+ return nil
+}
+
func deleteBuilderPod(ctx context.Context, c ctrl.Writer, build *v1.Build) error {
pod := corev1.Pod{
TypeMeta: metav1.TypeMeta{
diff --git a/pkg/controller/integrationkit/build.go b/pkg/controller/integrationkit/build.go
index 84cb3331d..d7dcea5dd 100644
--- a/pkg/controller/integrationkit/build.go
+++ b/pkg/controller/integrationkit/build.go
@@ -109,13 +109,10 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1.Int
// It has to be the same namespace as the operator as they must share a PVC
builderPodNamespace := platform.GetOperatorNamespace()
- buildStrategy := env.Platform.Status.Build.BuildConfiguration.Strategy
- if env.BuildConfiguration.Strategy != "" {
- buildStrategy = env.BuildConfiguration.Strategy
- }
+ buildConfig := env.Platform.Status.Build.BuildConfiguration
// nolint: contextcheck
- if buildStrategy == v1.BuildStrategyPod {
+ if buildConfig.Strategy == v1.BuildStrategyPod {
// Pod strategy requires a PVC to exist. If it does not exist, we warn the user and fallback to Routine build strategy
if pvc, err := kubernetes.LookupPersistentVolumeClaim(env.Ctx, env.Client, builderPodNamespace, defaults.DefaultPVC); pvc != nil || err != nil {
err = platform.CreateBuilderServiceAccount(env.Ctx, env.Client, env.Platform)
@@ -124,7 +121,7 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1.Int
}
} else {
// Fallback to Routine strategy
- buildStrategy = v1.BuildStrategyRoutine
+ buildConfig.Strategy = v1.BuildStrategyRoutine
Log.Info(`Warning: the operator was installed with an ephemeral storage, builder "pod" strategy is not supported: using "routine" build strategy as a fallback. We recommend to configure a PersistentVolumeClaim in order to be able to use "pod" builder strategy. Please consider that certain features such as Quarkus native require a "pod" builder strategy (hence a PVC) to work properly.`)
}
}
@@ -141,7 +138,7 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1.Int
Annotations: annotations,
},
Spec: v1.BuildSpec{
- Strategy: buildStrategy,
+ Configuration: buildConfig,
ToolImage: env.CamelCatalog.Image,
BuilderPodNamespace: builderPodNamespace,
Tasks: env.BuildTasks,
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index 85e05d227..3b570ce21 100644
--- a/pkg/resources/resources.go
+++ b/pkg/resources/resources.go
@@ -138,9 +138,9 @@ var assets = func() http.FileSystem {
"/crd/bases/camel.apache.org_integrationplatforms.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_integrationplatforms.yaml",
modTime: time.Time{},
- uncompressedSize: 176747,
+ uncompressedSize: 178291,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7d\x73\xdb\x36\xb6\x30\xfe\x7f\x3f\x05\xc6\x9d\x3b\x71\x32\x96\x9c\xee\xde\xee\xf6\xfa\x4e\xe7\x79\x5c\x27\x6d\xdd\xbc\xd8\xd7\x76\xb2\xbb\xd3\x76\x2a\x88\x3c\x92\x50\x83\x00\x2f\x00\xca\x56\x7f\xfb\xfb\xee\xcf\xe0\x00\x20\x29\x89\x04\x29\xc9\x71\xd2\x56\xec\xcc\x6e\x6c\x13\x87\x07\xc0\xc1\x79\xc3\x79\xf9\x9c\x0c\x1e\xee\xf9\xec\x73\xf2\x9a\x25\x20\x34\xa4\xc4\x48\x62\x66\x40\x4e\x73\x9a\xcc\x80\x5c\xcb\x89\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7d\x73\xdb\x36\xb6\x30\xfe\x7f\x3f\x05\xc6\x9d\x3b\x71\x32\x96\x9c\xee\xde\xee\xf6\xfa\x4e\xe7\x79\x5c\x27\x6d\xdd\xbc\xd8\xd7\x76\xb2\xbb\xd3\x76\x2a\x88\x3c\x92\x50\x83\x00\x2f\x00\xca\x56\x7f\xfb\xfb\xee\xcf\xe0\x00\x20\x29\x89\x04\x29\xc9\x4e\xd2\x56\xec\xcc\x6e\x6c\x13\x87\x07\xc0\xc1\x79\xc3\x79\xf9\x9c\x0c\x1e\xee\xf9\xec\x73\xf2\x9a\x25\x20\x34\xa4\xc4\x48\x62\x66\x40\x4e\x73\x9a\xcc\x80\x5c\xcb\x89\x [...]
},
"/crd/bases/camel.apache.org_integrations.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_integrations.yaml",
@@ -512,9 +512,9 @@ var assets = func() http.FileSystem {
"/samples/bases/camel_v1_integrationplatform.yaml": &vfsgen۰CompressedFileInfo{
name: "camel_v1_integrationplatform.yaml",
modTime: time.Time{},
- uncompressedSize: 1058,
+ uncompressedSize: 1111,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x53\xcd\x6e\xdb\x3c\x10\xbc\xf3\x29\x06\xd6\x25\x01\x1c\xfb\xfb\x7a\x74\x4f\x6a\x62\xa3\x42\x03\xb9\x88\x9c\x06\x39\xae\xa5\xb5\xb4\x08\x45\xaa\x24\x15\xc5\x6f\x5f\x50\x96\x1b\x07\xbd\x86\x37\x81\xcb\xf9\xd9\x19\x25\xb8\xf9\xbc\xa3\x12\xdc\x4b\xc9\xc6\x73\x85\x60\x11\x1a\x46\xda\x51\xd9\x30\x0a\x7b\x08\x03\x39\xc6\xc6\xf6\xa6\xa2\x20\xd6\xe0\x2a\x2d\x36\xd7\xe8\x4d\xc5\x0e\xd6\x30\xac\x43\x6b\x1d\xab\x04\xa5\x35\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x53\x41\x6e\xe3\x38\x10\xbc\xf3\x15\x05\xeb\x92\x00\x8e\xbd\xbb\x47\xef\xc9\xeb\xd8\x58\x61\x02\x7b\x10\x39\x13\xe4\xd8\x16\xdb\x52\x23\x14\xa9\x21\xa9\x28\xfe\xfd\x80\xb2\x3c\x71\x30\xd7\xf0\x24\xa9\x9b\x5d\x55\x5d\xa5\x0c\x77\x5f\x77\x54\x86\x07\x29\xd9\x06\xd6\x88\x0e\xb1\x66\x2c\x5b\x2a\x6b\x46\xe1\x8e\xb1\x27\xcf\xd8\xb8\xce\x6a\x8a\xe2\x2c\x6e\x96\xc5\xe6\x16\x9d\xd5\xec\xe1\x2c\xc3\x79\x34\xce\xb3\xca\x50\x [...]
},
"/samples/bases/camel_v1_kamelet.yaml": &vfsgen۰CompressedFileInfo{
name: "camel_v1_kamelet.yaml",
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index 8082e7658..ba30eb727 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -161,6 +161,19 @@ func (t *builderTrait) Apply(e *Environment) error {
}
}
+ if t.RequestCPU != "" {
+ e.BuildConfiguration.RequestCPU = t.RequestCPU
+ }
+ if t.RequestMemory != "" {
+ e.BuildConfiguration.RequestMemory = t.RequestMemory
+ }
+ if t.LimitCPU != "" {
+ e.BuildConfiguration.LimitCPU = t.LimitCPU
+ }
+ if t.LimitMemory != "" {
+ e.BuildConfiguration.LimitMemory = t.LimitMemory
+ }
+
return nil
}
diff --git a/pkg/trait/container.go b/pkg/trait/container.go
index d19c9df7d..141b4f58e 100644
--- a/pkg/trait/container.go
+++ b/pkg/trait/container.go
@@ -25,7 +25,6 @@ import (
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/utils/pointer"
@@ -195,7 +194,7 @@ func (t *containerTrait) configureContainer(e *Environment) error {
e.Resources.Add(props)
}
- t.configureResources(e, &container)
+ t.configureResources(&container)
if pointer.BoolDeref(t.Expose, false) {
t.configureService(e, &container)
}
@@ -303,50 +302,36 @@ func (t *containerTrait) configureService(e *Environment, container *corev1.Cont
service.Labels["camel.apache.org/service.type"] = v1.ServiceTypeUser
}
-func (t *containerTrait) configureResources(_ *Environment, container *corev1.Container) {
- // Requests
- if container.Resources.Requests == nil {
- container.Resources.Requests = make(corev1.ResourceList)
+func (t *containerTrait) configureResources(container *corev1.Container) {
+ requestsList := container.Resources.Requests
+ limitsList := container.Resources.Limits
+ var err error
+ if requestsList == nil {
+ requestsList = make(corev1.ResourceList)
}
-
- if t.RequestCPU != "" {
- v, err := resource.ParseQuantity(t.RequestCPU)
- if err != nil {
- t.L.Error(err, "unable to parse quantity", "request-cpu", t.RequestCPU)
- } else {
- container.Resources.Requests[corev1.ResourceCPU] = v
- }
- }
- if t.RequestMemory != "" {
- v, err := resource.ParseQuantity(t.RequestMemory)
- if err != nil {
- t.L.Error(err, "unable to parse quantity", "request-memory", t.RequestMemory)
- } else {
- container.Resources.Requests[corev1.ResourceMemory] = v
- }
+ if limitsList == nil {
+ limitsList = make(corev1.ResourceList)
}
- // Limits
- if container.Resources.Limits == nil {
- container.Resources.Limits = make(corev1.ResourceList)
+ requestsList, err = kubernetes.ConfigureResource(t.RequestCPU, requestsList, corev1.ResourceCPU)
+ if err != nil {
+ t.L.Error(err, "unable to parse quantity", "request-cpu", t.RequestCPU)
}
-
- if t.LimitCPU != "" {
- v, err := resource.ParseQuantity(t.LimitCPU)
- if err != nil {
- t.L.Error(err, "unable to parse quantity", "limit-cpu", t.LimitCPU)
- } else {
- container.Resources.Limits[corev1.ResourceCPU] = v
- }
+ requestsList, err = kubernetes.ConfigureResource(t.RequestMemory, requestsList, corev1.ResourceMemory)
+ if err != nil {
+ t.L.Error(err, "unable to parse quantity", "request-memory", t.RequestMemory)
}
- if t.LimitMemory != "" {
- v, err := resource.ParseQuantity(t.LimitMemory)
- if err != nil {
- t.L.Error(err, "unable to parse quantity", "limit-memory", t.LimitMemory)
- } else {
- container.Resources.Limits[corev1.ResourceMemory] = v
- }
+ limitsList, err = kubernetes.ConfigureResource(t.LimitCPU, limitsList, corev1.ResourceCPU)
+ if err != nil {
+ t.L.Error(err, "unable to parse quantity", "limit-cpu", t.LimitCPU)
+ }
+ limitsList, err = kubernetes.ConfigureResource(t.LimitMemory, limitsList, corev1.ResourceMemory)
+ if err != nil {
+ t.L.Error(err, "unable to parse quantity", "limit-memory", t.LimitMemory)
}
+
+ container.Resources.Requests = requestsList
+ container.Resources.Limits = limitsList
}
func (t *containerTrait) configureCapabilities(e *Environment) {
diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go
index f92a272c8..58b1ca33e 100644
--- a/pkg/trait/quarkus.go
+++ b/pkg/trait/quarkus.go
@@ -149,9 +149,10 @@ func (t *quarkusTrait) Configure(e *Environment) (bool, error) {
func (t *quarkusTrait) Apply(e *Environment) error {
if t.hasKitNativeType() {
// Force the build to run in a separate Pod
- t.L.Info("Quarkus Native requires a build pod strategy")
+ t.L.Info("This is a Quarkus native build: setting build configuration with build Pod strategy, 1 CPU core and 8 GiB memory. Make sure your cluster can handle it.")
e.BuildConfiguration.Strategy = v1.BuildStrategyPod
- // TODO we may provide a set of sensible resource default values for the Pod spun off
+ e.BuildConfiguration.RequestCPU = "1000m"
+ e.BuildConfiguration.RequestMemory = "8Gi"
}
if e.IntegrationInPhase(v1.IntegrationPhaseBuildingKit) {
diff --git a/pkg/util/kubernetes/factory.go b/pkg/util/kubernetes/factory.go
index 389378570..1915c76d9 100644
--- a/pkg/util/kubernetes/factory.go
+++ b/pkg/util/kubernetes/factory.go
@@ -179,3 +179,16 @@ func NewPersistentVolumeClaim(ns, name, storageClassName, capacityStorage string
}
return &pvc
}
+
+// ConfigureResource will set a resource on the specified resource list or returns an error.
+func ConfigureResource(resourceQty string, list corev1.ResourceList, name corev1.ResourceName) (corev1.ResourceList, error) {
+ if resourceQty != "" {
+ v, err := resource.ParseQuantity(resourceQty)
+ if err != nil {
+ return list, err
+ }
+ list[name] = v
+ }
+
+ return list, nil
+}
diff --git a/pkg/util/kubernetes/factory_test.go b/pkg/util/kubernetes/factory_test.go
index a92695f86..530c747fa 100644
--- a/pkg/util/kubernetes/factory_test.go
+++ b/pkg/util/kubernetes/factory_test.go
@@ -22,6 +22,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ corev1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)
@@ -170,3 +171,18 @@ func TestMissingResourceRequirements(t *testing.T) {
_, err := NewResourceRequirements(strings.Split(resReq, ","))
assert.NotNil(t, err)
}
+
+func TestConfigureResources(t *testing.T) {
+ requestsList := make(corev1.ResourceList)
+ requestsList, err := ConfigureResource("500m", requestsList, corev1.ResourceCPU)
+ assert.Nil(t, err)
+ assert.Equal(t, "500m", requestsList.Cpu().String())
+ requestsList, err = ConfigureResource("5Gi", requestsList, corev1.ResourceMemory)
+ assert.Nil(t, err)
+ assert.Equal(t, "5Gi", requestsList.Memory().String())
+ requestsList, err = ConfigureResource("5ss", requestsList, corev1.ResourceCPU)
+ assert.NotNil(t, err)
+ // Assert previous values haven't changed
+ assert.Equal(t, "500m", requestsList.Cpu().String())
+ assert.Equal(t, "5Gi", requestsList.Memory().String())
+}
diff --git a/resources/traits.yaml b/resources/traits.yaml
index 41c56e172..4c091900d 100755
--- a/resources/traits.yaml
+++ b/resources/traits.yaml
@@ -212,6 +212,22 @@ traits:
- name: strategy
type: string
description: The strategy to use, either `pod` or `routine` (default routine)
+ - name: request-cpu
+ type: string
+ description: When using `pod` strategy, the minimum amount of CPU required by
+ the pod builder.
+ - name: request-memory
+ type: string
+ description: When using `pod` strategy, the minimum amount of memory required
+ by the pod builder.
+ - name: limit-cpu
+ type: string
+ description: When using `pod` strategy, the maximum amount of CPU required by
+ the pod builder.
+ - name: limit-memory
+ type: string
+ description: When using `pod` strategy, the maximum amount of memory required
+ by the pod builder.
- name: camel
platform: true
profiles: