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
The following commit(s) were added to refs/heads/main by this push: new 66f1469f8 feat: default resources for Operator and Integration Pods 66f1469f8 is described below commit 66f1469f896c7d6f9d465c1a6d31d323a4c393ea Author: Pasquale Congiusti <pasquale.congiu...@gmail.com> AuthorDate: Thu Jun 27 16:12:05 2024 +0200 feat: default resources for Operator and Integration Pods Closes #5601 --- .../pages/installation/advanced/resources.adoc | 34 ++++++++++++++++------ docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 8 ++--- docs/modules/traits/pages/container.adoc | 8 ++--- e2e/advanced/integration_profile_test.go | 16 ++-------- e2e/advanced/local_platform_test.go | 2 +- helm/camel-k/crds/crd-integration-platform.yaml | 24 ++++++++++----- helm/camel-k/crds/crd-integration-profile.yaml | 24 ++++++++++----- helm/camel-k/crds/crd-integration.yaml | 12 +++++--- helm/camel-k/crds/crd-kamelet-binding.yaml | 12 +++++--- helm/camel-k/crds/crd-pipe.yaml | 12 +++++--- pkg/apis/camel/v1/trait/container.go | 8 ++--- .../camel.apache.org_integrationplatforms.yaml | 24 ++++++++++----- .../camel.apache.org_integrationprofiles.yaml | 24 ++++++++++----- .../crd/bases/camel.apache.org_integrations.yaml | 12 +++++--- .../bases/camel.apache.org_kameletbindings.yaml | 12 +++++--- .../config/crd/bases/camel.apache.org_pipes.yaml | 12 +++++--- .../config/manager/operator-deployment.yaml | 8 ++++- pkg/trait/container.go | 9 ++++++ pkg/trait/container_test.go | 22 ++++++++++++++ 19 files changed, 190 insertions(+), 93 deletions(-) diff --git a/docs/modules/ROOT/pages/installation/advanced/resources.adoc b/docs/modules/ROOT/pages/installation/advanced/resources.adoc index 088fcc18b..796c852fa 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 7c9786d81..48d2ba048 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 39551b17f..6e96d4523 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 0a14026e2..3844a060d 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 ec03d1317..3056ef4e2 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 5d9ee1e1a..12a6a9bbe 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 9baf9d77b..500b87dfa 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 76e5ad2e4..9d40098b6 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 6d14445f1..580f1d019 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 7324a1bf6..02845cf0f 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 89362df21..2e6ad9121 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 5d9ee1e1a..12a6a9bbe 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 9baf9d77b..500b87dfa 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 76e5ad2e4..9d40098b6 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 6d14445f1..580f1d019 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 7324a1bf6..02845cf0f 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 7e3ac0777..a02bc5d04 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 9a5d78f69..b50530481 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 0f4414dc7..d3988163b 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)