diff --git a/backend/substrapp/compute_tasks/compute_pod.py b/backend/substrapp/compute_tasks/compute_pod.py index bc12bea02..a062efc44 100644 --- a/backend/substrapp/compute_tasks/compute_pod.py +++ b/backend/substrapp/compute_tasks/compute_pod.py @@ -6,6 +6,7 @@ from substrapp.kubernetes_utils import delete_pod from substrapp.kubernetes_utils import get_pod_security_context +from substrapp.kubernetes_utils import get_resources_requirements from substrapp.kubernetes_utils import get_security_context NAMESPACE = settings.NAMESPACE @@ -112,6 +113,7 @@ def create_pod( args=None, volume_mounts=volume_mounts + gpu_volume_mounts, security_context=get_security_context(), + resources=get_resources_requirements(), env=[kubernetes.client.V1EnvVar(name=env_name, value=env_value) for env_name, env_value in environment.items()], **container_optional_kwargs, ) diff --git a/backend/substrapp/kubernetes_utils.py b/backend/substrapp/kubernetes_utils.py index 5bb6ac65f..173a77253 100644 --- a/backend/substrapp/kubernetes_utils.py +++ b/backend/substrapp/kubernetes_utils.py @@ -47,6 +47,12 @@ def get_security_context(root: bool = False, capabilities: list[str] = None) -> return security_context +def get_resources_requirements() -> kubernetes.client.V1ResourceRequirements: + return kubernetes.client.V1ResourceRequirements( + requests={"cpu": "1000m", "memory": "2Gi"}, limits={"memory": "128Gi"} + ) + + def pod_exists_by_label_selector(k8s_client: kubernetes.client.CoreV1Api, label_selector: str) -> bool: """Return True if the pod exists, else False. diff --git a/charts/substra-backend/templates/deployment-api-events.yaml b/charts/substra-backend/templates/deployment-api-events.yaml index 8ee0323a0..ab19cfa53 100644 --- a/charts/substra-backend/templates/deployment-api-events.yaml +++ b/charts/substra-backend/templates/deployment-api-events.yaml @@ -41,6 +41,12 @@ spec: - name: api-event-app image: {{ include "substra-backend.images.name" (dict "img" .Values.api.events.image "defaultTag" $.Chart.AppVersion) }} imagePullPolicy: {{ .Values.api.events.image.pullPolicy }} + resources: + requests: + memory: "200Mi" + cpu: "500m" + limits: + memory: "400Mi" command: ["/bin/bash"] {{- if eq .Values.settings "prod" }} args: ["-c", "python manage.py consume"] diff --git a/charts/substra-backend/templates/deployment-registry-prepopulate.yaml b/charts/substra-backend/templates/deployment-registry-prepopulate.yaml index 2f1da5668..ca1b9222c 100644 --- a/charts/substra-backend/templates/deployment-registry-prepopulate.yaml +++ b/charts/substra-backend/templates/deployment-registry-prepopulate.yaml @@ -23,9 +23,21 @@ spec: initContainers: - name: wait-registry image: jwilder/dockerize:0.6.1 + resources: + requests: + memory: "200Mi" + cpu: "500m" + limits: + memory: "400Mi" command: ['dockerize', '-wait', 'tcp://{{ $.Release.Name }}-docker-registry:5000'] - name: kaniko image: {{ include "common.images.name" $.Values.kaniko.image }} + resources: + requests: + memory: "2Gi" + cpu: "1000m" + limits: + memory: "4Gi" args: - "--context=/docker-context" {{- if .dstImage }} @@ -48,6 +60,13 @@ spec: containers: - image: gcr.io/google-containers/pause:3.2 name: pause + resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" volumes: - name: kaniko-dir emptyDir: {} diff --git a/charts/substra-backend/templates/deployment-worker-events.yaml b/charts/substra-backend/templates/deployment-worker-events.yaml index 571360b1a..6b6e2a65e 100644 --- a/charts/substra-backend/templates/deployment-worker-events.yaml +++ b/charts/substra-backend/templates/deployment-worker-events.yaml @@ -41,6 +41,12 @@ spec: - name: worker-event-app image: {{ include "substra-backend.images.name" (dict "img" .Values.worker.events.image "defaultTag" $.Chart.AppVersion) }} imagePullPolicy: {{ .Values.worker.events.image.pullPolicy }} + resources: + requests: + memory: "200Mi" + cpu: "500m" + limits: + memory: "400Mi" command: ["/bin/bash"] {{- if eq .Values.settings "prod" }} args: ["-c", "python manage.py consume"] diff --git a/charts/substra-backend/values.yaml b/charts/substra-backend/values.yaml index edf639a9e..d9202422b 100644 --- a/charts/substra-backend/values.yaml +++ b/charts/substra-backend/values.yaml @@ -181,7 +181,15 @@ server: ## cpu: 100m ## memory: 128Mi ## - resources: {} + resources: { + requests: { + cpu: "1000m", + memory: "4Gi" + }, + limits: { + memory: "32Gi" + } + } persistence: ## @param server.persistence.storageClass Specify the _StorageClass_ used to provision the volume. Or the default _StorageClass_ will be used. Set it to `-` to disable dynamic provisioning @@ -828,6 +836,15 @@ postgresql: capabilities: drop: - ALL + resources: { + requests: { + cpu: "1000m", + memory: "200Mi" + }, + limits: { + memory: "64Gi" + } + } ## @skip redis ## @@ -849,6 +866,15 @@ redis: appendonly yes # Disable RDB persistence since AOF persistence is enabled save "" + resources: { + requests: { + cpu: "1000m", + memory: "512Mi" + }, + limits: { + memory: "1024Mi" + } + } ## @skip docker-registry ## @@ -861,6 +887,15 @@ docker-registry: deleteEnabled: true service: type: NodePort + resources: { + requests: { + cpu: "1000m", + memory: "16Gi" + }, + limits: { + memory: "64Gi" + } + } ## @skip minio ## @@ -881,6 +916,15 @@ minio: capabilities: drop: - ALL + resources: { + requests: { + cpu: "1000m", + memory: "16Gi" + }, + limits: { + memory: "64Gi" + } +} ## @skip localstack ##