diff --git a/docs/modules/ROOT/pages/installation/advanced/resources.adoc b/docs/modules/ROOT/pages/installation/advanced/resources.adoc index 088fcc18be..796c852fa8 100644 --- a/docs/modules/ROOT/pages/installation/advanced/resources.adoc +++ b/docs/modules/ROOT/pages/installation/advanced/resources.adoc @@ -34,25 +34,41 @@ The option accept a value in the following format `Key[=Value]:Effect[:Seconds]` While installing the Camel K operator, you can also specify the resources requests and limits to assign to the operator `Pod` with `--operator-resources` option. The option will expect the configuration as required by https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[Kubernetes Resource Management]. ``` -kamel install --operator-resources requests.cpu=256m --operator-resources limits.cpu=500m --operator-resources limits.memory=512Mi ... +kamel install --operator-resources limits.cpu=8 --operator-resources limits.memory=32Gi ... ``` The value expected by the option are in the form `requestType.requestResource=value` where `requestType` must be either `requests` or `limits`, `requestResource` must be either `cpu` or `memory` and `value` expressed in the numeric value as expected by the resource. You can specify more than one `operator-resources`. NOTE: if you specify a limit, but does not specify a request, Kubernetes automatically assigns a request that matches the limit. -=== Suggested configuration +=== Default Operator Pod configuration -The main contributor to compute resources consumption is likely to be the Maven builds that are performed in the operator `Pod` (assuming you use the default build strategy). So the resource requirements should be defined accordingly. The following requirements are sensible defaults that should work in most cases: +The main Camel K Operator Pod contributor resources consumption is likely to be the number of parallel builds that are performed in the operator `Pod`. So the resource requirements should be defined accordingly. The following requirements are sensible defaults that should work in most cases: ``` resources: - limits: - cpu: "1" - memory: 1Gi requests: - cpu: 500m - memory: 512Mi + memory: "4Gi" + cpu: "1" + limits: + memory: "16Gi" + cpu: "4" ``` -Note that if you plan to perform **native builds**, then the memory requirements must be increased significantly. Also, the CPU requirements are rather "soft", in the sense that it won't break the operator, but it'll perform slower in general. +Note that if you plan to perform **native builds**, then the memory requirements may be increased significantly. Also, the CPU requirements are rather "soft", in the sense that it won't break the operator, but it'll perform slower in general. + +=== Default Integration Pod configuration + +The resource set on the container here is highly dependant on what your application is doing. You can control this behavior by setting opportunely the resources on the Integration via container trait. + +Be aware that the default are actually the following: + +``` +resources: + requests: + memory: "256Mi" + cpu: "125m" + limits: + memory: "1Gi" + cpu: "500m" +``` \ No newline at end of file diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc index 7c9786d818..48d2ba0483 100644 --- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc +++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc @@ -6473,28 +6473,28 @@ string | -The minimum amount of CPU required. +The minimum amount of CPU required (default 125 millicores). |`requestMemory` + string | -The minimum amount of memory required. +The minimum amount of memory required (default 128 Mi). |`limitCPU` + string | -The maximum amount of CPU required. +The maximum amount of CPU to be provided (default 500 millicores). |`limitMemory` + string | -The maximum amount of memory required. +The maximum amount of memory to be provided (default 512 Mi). |`expose` + bool diff --git a/docs/modules/traits/pages/container.adoc b/docs/modules/traits/pages/container.adoc index 39551b17f6..6e96d45239 100755 --- a/docs/modules/traits/pages/container.adoc +++ b/docs/modules/traits/pages/container.adoc @@ -37,19 +37,19 @@ The following configuration options are available: | container.request-cpu | string -| The minimum amount of CPU required. +| The minimum amount of CPU required (default 125 millicores). | container.request-memory | string -| The minimum amount of memory required. +| The minimum amount of memory required (default 128 Mi). | container.limit-cpu | string -| The maximum amount of CPU required. +| The maximum amount of CPU to be provided (default 500 millicores). | container.limit-memory | string -| The maximum amount of memory required. +| The maximum amount of memory to be provided (default 512 Mi). | container.expose | bool diff --git a/e2e/advanced/integration_profile_test.go b/e2e/advanced/integration_profile_test.go index 0a14026e23..3844a060d0 100644 --- a/e2e/advanced/integration_profile_test.go +++ b/e2e/advanced/integration_profile_test.go @@ -48,7 +48,7 @@ func TestIntegrationProfile(t *testing.T) { integrationProfile.SetOperatorID(operatorID) integrationProfile.Spec.Traits.Container = &traitv1.ContainerTrait{ Name: "ck-integration-global", - LimitCPU: "0.2", + LimitCPU: "0.3", } g.Expect(CreateIntegrationProfile(t, ctx, &integrationProfile)).To(Succeed()) @@ -58,7 +58,7 @@ func TestIntegrationProfile(t *testing.T) { integrationProfile := v1.NewIntegrationProfile(ns1, "ipr-local") integrationProfile.SetOperatorID(operatorID) integrationProfile.Spec.Traits.Container = &traitv1.ContainerTrait{ - LimitCPU: "0.1", + LimitCPU: "0.2", } g.Expect(CreateIntegrationProfile(t, ctx, &integrationProfile)).To(Succeed()) g.Eventually(SelectedIntegrationProfilePhase(t, ctx, ns1, "ipr-local"), TestTimeoutMedium).Should(Equal(v1.IntegrationProfilePhaseReady)) @@ -106,18 +106,6 @@ func TestIntegrationProfile(t *testing.T) { g.Expect(Kamel(t, ctx, "delete", "limited", "-n", ns1).Execute()).To(Succeed()) }) - t.Run("Run integration without integration profile", func(t *testing.T) { - g.Expect(KamelRunWithID(t, ctx, operatorID, ns1, "--name", "normal", "files/yaml.yaml").Execute()).To(Succeed()) - g.Eventually(IntegrationPod(t, ctx, ns1, "normal"), TestTimeoutShort).Should(Not(BeNil())) - g.Eventually(IntegrationPodHas(t, ctx, ns1, "normal", func(pod *corev1.Pod) bool { - if len(pod.Spec.Containers) != 1 { - return false - } - cpuLimits := pod.Spec.Containers[0].Resources.Limits.Cpu() - return cpuLimits == nil || cpuLimits.IsZero() - }), TestTimeoutShort).Should(BeTrue()) - }) - // Clean up g.Expect(Kamel(t, ctx, "delete", "--all", "-n", ns1).Execute()).To(Succeed()) }) diff --git a/e2e/advanced/local_platform_test.go b/e2e/advanced/local_platform_test.go index ec03d1317a..3056ef4e26 100644 --- a/e2e/advanced/local_platform_test.go +++ b/e2e/advanced/local_platform_test.go @@ -65,7 +65,7 @@ func TestLocalPlatform(t *testing.T) { pl.SetOperatorID(operatorID) pl.Spec.Traits.Container = &traitv1.ContainerTrait{ - LimitCPU: "0.1", + LimitCPU: "0.2", } })).To(Succeed()) diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml index 5d9ee1e1ac..12a6a9bbea 100644 --- a/helm/camel-k/crds/crd-integration-platform.yaml +++ b/helm/camel-k/crds/crd-integration-platform.yaml @@ -734,10 +734,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -753,10 +755,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default @@ -2766,10 +2770,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -2785,10 +2791,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/helm/camel-k/crds/crd-integration-profile.yaml b/helm/camel-k/crds/crd-integration-profile.yaml index 9baf9d77b6..500b87dfa7 100644 --- a/helm/camel-k/crds/crd-integration-profile.yaml +++ b/helm/camel-k/crds/crd-integration-profile.yaml @@ -611,10 +611,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -630,10 +632,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default @@ -2526,10 +2530,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -2545,10 +2551,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml index 76e5ad2e47..9d40098b6c 100644 --- a/helm/camel-k/crds/crd-integration.yaml +++ b/helm/camel-k/crds/crd-integration.yaml @@ -6675,10 +6675,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6694,10 +6696,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml index 6d14445f11..580f1d0197 100644 --- a/helm/camel-k/crds/crd-kamelet-binding.yaml +++ b/helm/camel-k/crds/crd-kamelet-binding.yaml @@ -6957,10 +6957,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided + (default 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided + (default 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6976,10 +6978,12 @@ spec: only when the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default + 125 millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml index 7324a1bf6f..02845cf0fb 100644 --- a/helm/camel-k/crds/crd-pipe.yaml +++ b/helm/camel-k/crds/crd-pipe.yaml @@ -6955,10 +6955,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided + (default 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided + (default 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6974,10 +6976,12 @@ spec: only when the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default + 125 millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration diff --git a/pkg/apis/camel/v1/trait/container.go b/pkg/apis/camel/v1/trait/container.go index 89362df21f..2e6ad91215 100644 --- a/pkg/apis/camel/v1/trait/container.go +++ b/pkg/apis/camel/v1/trait/container.go @@ -28,13 +28,13 @@ type ContainerTrait struct { PlatformBaseTrait `property:",squash" json:",inline"` // To automatically enable the trait Auto *bool `property:"auto" json:"auto,omitempty"` - // The minimum amount of CPU required. + // The minimum amount of CPU required (default 125 millicores). RequestCPU string `property:"request-cpu" json:"requestCPU,omitempty"` - // The minimum amount of memory required. + // The minimum amount of memory required (default 128 Mi). RequestMemory string `property:"request-memory" json:"requestMemory,omitempty"` - // The maximum amount of CPU required. + // The maximum amount of CPU to be provided (default 500 millicores). LimitCPU string `property:"limit-cpu" json:"limitCPU,omitempty"` - // The maximum amount of memory required. + // The maximum amount of memory to be provided (default 512 Mi). LimitMemory string `property:"limit-memory" json:"limitMemory,omitempty"` // Can be used to enable/disable exposure via kubernetes Service. Expose *bool `property:"expose" json:"expose,omitempty"` diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml index 5d9ee1e1ac..12a6a9bbea 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml @@ -734,10 +734,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -753,10 +755,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default @@ -2766,10 +2770,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -2785,10 +2791,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml index 9baf9d77b6..500b87dfa7 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml @@ -611,10 +611,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -630,10 +632,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default @@ -2526,10 +2530,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -2545,10 +2551,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml index 76e5ad2e47..9d40098b6c 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml @@ -6675,10 +6675,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided (default + 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided (default + 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6694,10 +6696,12 @@ spec: the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default 125 + millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration (default diff --git a/pkg/resources/config/crd/bases/camel.apache.org_kameletbindings.yaml b/pkg/resources/config/crd/bases/camel.apache.org_kameletbindings.yaml index 6d14445f11..580f1d0197 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_kameletbindings.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_kameletbindings.yaml @@ -6957,10 +6957,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided + (default 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided + (default 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6976,10 +6978,12 @@ spec: only when the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default + 125 millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml index 7324a1bf6f..02845cf0fb 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml @@ -6955,10 +6955,12 @@ spec: - IfNotPresent type: string limitCPU: - description: The maximum amount of CPU required. + description: The maximum amount of CPU to be provided + (default 500 millicores). type: string limitMemory: - description: The maximum amount of memory required. + description: The maximum amount of memory to be provided + (default 512 Mi). type: string name: description: The main container name. It's named `integration` @@ -6974,10 +6976,12 @@ spec: only when the `expose` parameter is true. type: string requestCPU: - description: The minimum amount of CPU required. + description: The minimum amount of CPU required (default + 125 millicores). type: string requestMemory: - description: The minimum amount of memory required. + description: The minimum amount of memory required (default + 128 Mi). type: string runAsNonRoot: description: Security Context RunAsNonRoot configuration diff --git a/pkg/resources/config/manager/operator-deployment.yaml b/pkg/resources/config/manager/operator-deployment.yaml index 7e3ac07776..a02bc5d04f 100644 --- a/pkg/resources/config/manager/operator-deployment.yaml +++ b/pkg/resources/config/manager/operator-deployment.yaml @@ -81,6 +81,13 @@ spec: port: 8081 initialDelaySeconds: 20 periodSeconds: 10 + resources: + requests: + memory: "4Gi" + cpu: "1" + limits: + memory: "16Gi" + cpu: "4" securityContext: runAsNonRoot: true seccompProfile: @@ -89,4 +96,3 @@ spec: capabilities: drop: - ALL - diff --git a/pkg/trait/container.go b/pkg/trait/container.go index 9a5d78f698..b50530481f 100644 --- a/pkg/trait/container.go +++ b/pkg/trait/container.go @@ -54,6 +54,11 @@ const ( defaultContainerSeccompProfileType = corev1.SeccompProfileTypeRuntimeDefault defaultContainerAllowPrivilegeEscalation = false defaultContainerCapabilitiesDrop = "ALL" + + defaultContainerResourceCPU = "125m" + defaultContainerResourceMemory = "128Mi" + defaultContainerLimitCPU = "500m" + defaultContainerLimitMemory = "512Mi" ) type containerTrait struct { @@ -73,6 +78,10 @@ func newContainerTrait() Trait { SeccompProfileType: defaultContainerSeccompProfileType, AllowPrivilegeEscalation: pointer.Bool(defaultContainerAllowPrivilegeEscalation), CapabilitiesDrop: []corev1.Capability{defaultContainerCapabilitiesDrop}, + RequestCPU: defaultContainerResourceCPU, + RequestMemory: defaultContainerResourceMemory, + LimitCPU: defaultContainerLimitCPU, + LimitMemory: defaultContainerLimitMemory, }, } } diff --git a/pkg/trait/container_test.go b/pkg/trait/container_test.go index 0f4414dc76..d3988163b3 100644 --- a/pkg/trait/container_test.go +++ b/pkg/trait/container_test.go @@ -27,6 +27,7 @@ import ( serving "knative.dev/serving/pkg/apis/serving/v1" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/utils/pointer" @@ -742,6 +743,27 @@ func TestUserSecurityContext(t *testing.T) { assert.Equal(t, []corev1.Capability{"ADD"}, d.Spec.Template.Spec.Containers[0].SecurityContext.Capabilities.Add) } +func TestUserDefaultResources(t *testing.T) { + environment := createSettingContextEnvironment(t, v1.TraitProfileKubernetes) + traitCatalog := NewCatalog(nil) + conditions, err := traitCatalog.apply(environment) + + require.NoError(t, err) + assert.NotEmpty(t, conditions) + assert.NotEmpty(t, environment.ExecutedTraits) + assert.NotNil(t, environment.GetTrait("deployment")) + assert.NotNil(t, environment.GetTrait("container")) + + d := environment.Resources.GetDeploymentForIntegration(environment.Integration) + + assert.NotNil(t, d) + assert.Len(t, d.Spec.Template.Spec.Containers, 1) + assert.Equal(t, resource.MustParse("500m"), *d.Spec.Template.Spec.Containers[0].Resources.Limits.Cpu()) + assert.Equal(t, resource.MustParse("125m"), *d.Spec.Template.Spec.Containers[0].Resources.Requests.Cpu()) + assert.Equal(t, resource.MustParse("512Mi"), *d.Spec.Template.Spec.Containers[0].Resources.Limits.Memory()) + assert.Equal(t, resource.MustParse("128Mi"), *d.Spec.Template.Spec.Containers[0].Resources.Requests.Memory()) +} + func createSettingContextEnvironment(t *testing.T, profile v1.TraitProfile) *Environment { catalog, err := camel.DefaultCatalog() require.NoError(t, err)