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: