diff --git a/kubernetes/glpi/templates/_helpers.tpl b/kubernetes/glpi/templates/_helpers.tpl index 2a759cd..dc9951a 100644 --- a/kubernetes/glpi/templates/_helpers.tpl +++ b/kubernetes/glpi/templates/_helpers.tpl @@ -87,6 +87,66 @@ Return the proper MariaDB image name {{- printf "%s:%s" .Values.mariadb.image.repository .Values.mariadb.image.tag }} {{- end }} +{{/* +Return a resource request/limit object for one of a fixed set of size presets +(nano/micro/small/medium/large/xlarge/2xlarge), following the same tiers used by +the Bitnami charts (bitnami/common's common.resources.preset) so operators already +familiar with that convention get predictable numbers here too. Only used as a +fallback when a component's explicit `resources` value is left empty ({}); an +explicit `resources` block always takes precedence over the preset. +Usage: {{ include "glpi.resources.preset" (dict "type" "small") }} +*/}} +{{- define "glpi.resources.preset" -}} +{{- $presets := dict + "nano" (dict + "requests" (dict "cpu" "100m" "memory" "128Mi") + "limits" (dict "cpu" "150m" "memory" "192Mi") + ) + "micro" (dict + "requests" (dict "cpu" "250m" "memory" "256Mi") + "limits" (dict "cpu" "375m" "memory" "384Mi") + ) + "small" (dict + "requests" (dict "cpu" "500m" "memory" "512Mi") + "limits" (dict "cpu" "750m" "memory" "768Mi") + ) + "medium" (dict + "requests" (dict "cpu" "500m" "memory" "1024Mi") + "limits" (dict "cpu" "750m" "memory" "1536Mi") + ) + "large" (dict + "requests" (dict "cpu" "1.0" "memory" "2048Mi") + "limits" (dict "cpu" "1.5" "memory" "3072Mi") + ) + "xlarge" (dict + "requests" (dict "cpu" "1.0" "memory" "3072Mi") + "limits" (dict "cpu" "3.0" "memory" "6144Mi") + ) + "2xlarge" (dict + "requests" (dict "cpu" "1.0" "memory" "3072Mi") + "limits" (dict "cpu" "6.0" "memory" "12288Mi") + ) + }} +{{- if hasKey $presets .type -}} +{{- index $presets .type | toYaml -}} +{{- else -}} +{{- printf "ERROR: resourcesPreset '%s' invalid. Allowed values are %s" .type (join "," (keys $presets)) | fail -}} +{{- end -}} +{{- end }} + +{{/* +Render a component's resources block: uses the explicit `resources` dict if it is +non-empty, otherwise falls back to `resourcesPreset` (skipped entirely if both are +unset). Usage: {{- include "glpi.resources" (dict "resources" .Values.glpi.phpfpm.resources "preset" .Values.glpi.phpfpm.resourcesPreset) | nindent 12 }} +*/}} +{{- define "glpi.resources" -}} +{{- if .resources -}} +{{- toYaml .resources -}} +{{- else if and .preset (ne .preset "none") -}} +{{- include "glpi.resources.preset" (dict "type" .preset) -}} +{{- end -}} +{{- end }} + {{/* Return the proper Redis image name */}} diff --git a/kubernetes/glpi/templates/glpi-deployment.yaml b/kubernetes/glpi/templates/glpi-deployment.yaml index a036973..475d77b 100644 --- a/kubernetes/glpi/templates/glpi-deployment.yaml +++ b/kubernetes/glpi/templates/glpi-deployment.yaml @@ -88,8 +88,11 @@ spec: timeoutSeconds: {{ .Values.glpi.phpfpm.readinessProbe.timeoutSeconds }} failureThreshold: {{ .Values.glpi.phpfpm.readinessProbe.failureThreshold }} {{- end }} + {{- $phpfpmRes := include "glpi.resources" (dict "resources" .Values.glpi.phpfpm.resources "preset" .Values.glpi.phpfpm.resourcesPreset) }} + {{- if $phpfpmRes }} resources: - {{- toYaml .Values.glpi.phpfpm.resources | nindent 12 }} + {{- $phpfpmRes | nindent 12 }} + {{- end }} volumes: - name: etc persistentVolumeClaim: @@ -196,8 +199,11 @@ spec: timeoutSeconds: {{ .Values.glpi.nginx.readinessProbe.timeoutSeconds }} failureThreshold: {{ .Values.glpi.nginx.readinessProbe.failureThreshold }} {{- end }} + {{- $nginxRes := include "glpi.resources" (dict "resources" .Values.glpi.nginx.resources "preset" .Values.glpi.nginx.resourcesPreset) }} + {{- if $nginxRes }} resources: - {{- toYaml .Values.glpi.nginx.resources | nindent 12 }} + {{- $nginxRes | nindent 12 }} + {{- end }} volumes: - name: etc persistentVolumeClaim: diff --git a/kubernetes/glpi/templates/mariadb-statefulset.yaml b/kubernetes/glpi/templates/mariadb-statefulset.yaml index 1f7987d..e981274 100644 --- a/kubernetes/glpi/templates/mariadb-statefulset.yaml +++ b/kubernetes/glpi/templates/mariadb-statefulset.yaml @@ -71,8 +71,11 @@ spec: - containerPort: 3306 name: mariadb protocol: TCP + {{- $mariadbRes := include "glpi.resources" (dict "resources" .Values.mariadb.primary.resources "preset" .Values.mariadb.primary.resourcesPreset) }} + {{- if $mariadbRes }} resources: - {{- toYaml .Values.mariadb.primary.resources | nindent 12 }} + {{- $mariadbRes | nindent 12 }} + {{- end }} volumeMounts: - name: data mountPath: "/var/lib/mysql" diff --git a/kubernetes/glpi/templates/redis-deployment.yaml b/kubernetes/glpi/templates/redis-deployment.yaml index b61d8ff..3e033ad 100644 --- a/kubernetes/glpi/templates/redis-deployment.yaml +++ b/kubernetes/glpi/templates/redis-deployment.yaml @@ -71,6 +71,9 @@ spec: periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 + {{- $redisRes := include "glpi.resources" (dict "resources" .Values.redis.resources "preset" .Values.redis.resourcesPreset) }} + {{- if $redisRes }} resources: - {{- toYaml .Values.redis.resources | nindent 12 }} + {{- $redisRes | nindent 12 }} + {{- end }} {{- end }} diff --git a/kubernetes/glpi/values.yaml b/kubernetes/glpi/values.yaml index 2083d80..7fe4bbd 100644 --- a/kubernetes/glpi/values.yaml +++ b/kubernetes/glpi/values.yaml @@ -35,6 +35,11 @@ glpi: # Number of PHP-FPM replicas replicaCount: 1 + # Set container resources according to one common preset (allowed values: none, nano, + # micro, small, medium, large, xlarge, 2xlarge). Only applied when `resources` below is + # left empty ({}). In production, setting `resources` explicitly is recommended over + # relying on a preset. + resourcesPreset: "none" # Resource limits and requests for PHP-FPM container resources: limits: @@ -82,6 +87,10 @@ glpi: # Number of Nginx replicas replicaCount: 1 + # Set container resources according to one common preset (allowed values: none, nano, + # micro, small, medium, large, xlarge, 2xlarge). Only applied when `resources` below is + # left empty ({}). + resourcesPreset: "none" # Resource limits and requests for Nginx container resources: limits: @@ -250,6 +259,10 @@ mariadb: # Primary database configuration primary: + # Set container resources according to one common preset (allowed values: none, nano, + # micro, small, medium, large, xlarge, 2xlarge). Only applied when `resources` below is + # left empty ({}). + resourcesPreset: "none" # Resource limits and requests for MariaDB resources: limits: @@ -309,6 +322,10 @@ redis: # Number of Redis replicas replicaCount: 1 + # Set container resources according to one common preset (allowed values: none, nano, + # micro, small, medium, large, xlarge, 2xlarge). Only applied when `resources` below is + # left empty ({}). + resourcesPreset: "none" # Resource limits and requests for Redis resources: limits: