feat: add resource requests and limits to all Helm charts

- Add default resource requests (500Mi memory, 100m CPU) and limits (1Gi memory) to standard charts:
  - forgejoRunner, hugo, postgres, prometheusAgent, taskfileBuild, vshnPostgres, vuepress
- Add higher resource requests (1Gi memory, 250m CPU) and limits (2Gi memory) to Odoo and Nextcloud charts
- Update deployment templates to reference `.Values.resources` instead of hardcoded values
- Replace hardcoded resource limits in forgejoRunner and vshnPostgres templates
- Update documentation (README.md) for all affected charts
- Update prometheusAgent default values to align with new standards
- Include task execution log in prompts directory
This commit is contained in:
Janik von Rotz committed 2026-09-10 15:18:52 +02:00
1 parent b786a93c10
commit b7ca1ac886
27 files changed
+228 -31

No files matched your search

+8
View File
@@ -81,3 +81,11 @@ Here is are examples of Forgejo action steps:
| `forgejoInstanceUrl` | Forgejo instance url. | `https://codeberg.org` |
| `secretRef` | The secret reference for the Forgejo Runner | `forgejo-runner` |
| `storageClassName` | Set the storage class | `""` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+3 -18
View File
@@ -47,12 +47,7 @@ spec:
- name: runner-config
mountPath: /config
resources:
limits:
cpu: "1"
memory: "1024Mi"
requests:
cpu: "50m"
memory: "32Mi"
{{- toYaml .Values.resources | nindent 10 }}
containers:
- name: runner
image: {{ .Values.image }}
@@ -77,12 +72,7 @@ spec:
- name: runner-config
mountPath: /config
resources:
limits:
cpu: "1"
memory: "1024Mi"
requests:
cpu: "50m"
memory: "32Mi"
{{- toYaml .Values.resources | nindent 10 }}
- name: daemon
image: docker:27.5.1-dind
env:
@@ -96,12 +86,7 @@ spec:
- name: docker-data
mountPath: /var/lib/docker
resources:
limits:
cpu: "2"
memory: "4096Mi"
requests:
cpu: "50m"
memory: "32Mi"
{{- toYaml .Values.resources | nindent 10 }}
volumes:
- name: docker-certs
emptyDir: {}
+10
View File
@@ -9,3 +9,13 @@ forgejoInstanceUrl: https://codeberg.org
secretRef: forgejo-runner
## @param storageClassName Set the storage class
storageClassName: ""
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"
+8
View File
@@ -20,3 +20,11 @@ This Helm chart deploys a Hugo site.
| ----------------- | -------------------------- | -------- |
| `image` | The image for Hugo | `""` |
| `imagePullPolicy` | Pull policy for Hugo image | `Always` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+2
View File
@@ -19,3 +19,5 @@ spec:
imagePullPolicy: {{ .Values.imagePullPolicy }}
ports:
- containerPort: 80
resources:
{{- toYaml .Values.resources | nindent 12 }}
+10
View File
@@ -16,3 +16,13 @@ ingress:
image: ""
## @param imagePullPolicy Pull policy for Hugo image
imagePullPolicy: Always
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"
+3
View File
@@ -65,6 +65,9 @@ kubectl create secret generic s3-credentials \
| `nextcloud.externalDatabase.existingSecret.secretName` | Name of the existing Kubernetes secret | `nextcloud-postgresql-app` |
| `nextcloud.externalDatabase.existingSecret.usernameKey` | Key in the secret containing the database username | `username` |
| `nextcloud.externalDatabase.existingSecret.passwordKey` | Key in the secret containing the database password | `password` |
| `nextcloud.resources.requests.memory` | Memory request for the container | `1Gi` |
| `nextcloud.resources.requests.cpu` | CPU request for the container | `250m` |
| `nextcloud.resources.limits.memory` | Memory limit for the container | `2Gi` |
### Redis parameters
+9
View File
@@ -66,6 +66,15 @@ nextcloud:
usernameKey: username
## @param nextcloud.externalDatabase.existingSecret.passwordKey Key in the secret containing the database password
passwordKey: password
resources:
## @param nextcloud.resources.requests.memory Memory request for the container
requests:
memory: "1Gi"
## @param nextcloud.resources.requests.cpu CPU request for the container
cpu: "250m"
limits:
## @param nextcloud.resources.limits.memory Memory limit for the container
memory: "2Gi"
## @section Redis parameters
redis:
+8
View File
@@ -95,6 +95,14 @@ kubectl create job --from=cronjob/<release>-staging-reset <release>-staging-rese
| `secretRef` | The secret reference for Odoo | `odoo-creds` |
| `storageClassName` | Set the storage class | `""` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------ |
| `resources.requests.memory` | Memory request for the container | `1Gi` |
| `resources.requests.cpu` | CPU request for the container | `250m` |
| `resources.limits.memory` | Memory limit for the container | `2Gi` |
### K8up parameters
| Name | Description | Value |
+4
View File
@@ -102,6 +102,8 @@ spec:
securityContext:
runAsUser: 0
runAsGroup: 0
resources:
{{- toYaml .Values.resources | nindent 12 }}
containers:
- name: odoo
image: {{ or .Values.staging.image .Values.image }}
@@ -184,6 +186,8 @@ spec:
readOnly: true
mountPath: "/mnt/{{ .Values.vshnPostgres.secretRef }}"
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumes:
- name: odoo-staging
persistentVolumeClaim:
+4
View File
@@ -104,6 +104,8 @@ spec:
readOnly: true
mountPath: "/mnt/{{ .Values.vshnPostgres.secretRef }}"
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
containers:
- name: odoo
image: {{ .Values.image }}
@@ -184,6 +186,8 @@ spec:
readOnly: true
mountPath: "/mnt/{{ .Values.vshnPostgres.secretRef }}"
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumes:
- name: odoo-main
persistentVolumeClaim:
+10
View File
@@ -91,6 +91,16 @@ workers: 5
secretRef: odoo-creds
## @param storageClassName Set the storage class
storageClassName: ""
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "1Gi"
## @param resources.requests.cpu CPU request for the container
cpu: "250m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "2Gi"
## @section K8up parameters
k8up:
+8
View File
@@ -17,3 +17,11 @@ This chart deploys a Postgres container and stores the credentials in a secret.
| `secretRef` | The secret reference for Postgres | `postgres` |
| `userPasswordKey` | The user password key for Postgres | `password` |
| `storageClassName` | Set the storage class | `""` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+2
View File
@@ -36,6 +36,8 @@ spec:
secretKeyRef:
name: {{ .Values.secretRef }}
key: {{ .Values.userPasswordKey }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
- mountPath: /var/lib/postgresql/data/
name: postgres
+10
View File
@@ -17,3 +17,13 @@ secretRef: postgres
userPasswordKey: "password"
## @param storageClassName Set the storage class
storageClassName: ""
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"
+3 -4
View File
@@ -33,10 +33,9 @@ kubectl create secret generic prometheus-remote-write-credentials \
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `64Mi` |
| `resources.requests.cpu` | CPU request for the container | `250m` |
| `resources.limits.memory` | Memory limit for the container | `128Mi` |
| `resources.limits.cpu` | CPU limit for the container | `500m` |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
### Kube-state-metrics configuration
+3 -5
View File
@@ -94,14 +94,12 @@ scrapeConfigs: |
resources:
requests:
## @param resources.requests.memory Memory request for the container
memory: "64Mi"
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "250m"
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "128Mi"
## @param resources.limits.cpu CPU limit for the container
cpu: "500m"
memory: "1Gi"
## @section Kube-state-metrics configuration
## @param kube-state-metrics.enabled Enable kube-state-metrics as sub-chart
@@ -0,0 +1,63 @@
---
title: "Add memory limit to all charts"
state: completed
model: infomaniak/moonshotai/Kimi-K2.6
input_tokens:
---
# Run 08
Note: @Clanker refers to the "ai agent" (you) who is working on this task.
@Clanker when working on this task, make sure to:
- Read context and task section first
- Prepare a list of todos
- Update the todo list while working on the task
## Context
@Clanker Read the `AGENTS.md` and `README.md` to get an understanding of the project.
## Task
Set this limit for all charts:
```yml
resources:
requests:
memory: "500Mi"
cpu: "100m"
limits:
memory: "1Gi"
```
And for odoo and nextcloud use this:
```yaml
resources:
requests:
memory: 1Gi
cpu: 250m
limits:
memory: 2Gi
```
## Worklog
Set resource limits for all charts with deployments:
- **odoo**, **nextcloud**: requests `memory: 1Gi`, `cpu: 250m`; limits `memory: 2Gi`
- **hugo**, **vuepress**, **taskfileBuild**, **postgres**, **prometheusAgent**, **forgejoRunner**, **vshnPostgres**: requests `memory: 500Mi`, `cpu: 100m`; limits `memory: 1Gi`
Changes made:
1. Added `resources` block to `values.yaml` for all relevant charts.
2. Updated deployment templates to reference `{{- toYaml .Values.resources | nindent 12 }}` (or appropriate indentation) where missing.
3. Replaced hardcoded resource limits in **forgejoRunner** and **vshnPostgres** templates with values references.
4. For **nextcloud**, passed resources to the upstream `nextcloud` subchart via `nextcloud.resources`.
5. Updated **prometheusAgent** values to the new default limits.
6. Ran `./task lint` and `./task docs` successfully to validate formatting and regenerate READMEs.
Skipped charts without container workloads: `clusterIssuer`, `deploymentUpdater`.
@Clanker Set frontmatter state to completed and update info about model and token usage.
+8
View File
@@ -25,3 +25,11 @@ This Helm chart deploys a taskfile.build container.
| `caddyRoot` | Static site path relative to repo root. | `""` |
| `additionalEnvs` | Additional environment variables to set | `{}` |
| `storageClassName` | Set the storage class | `""` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+2
View File
@@ -32,6 +32,8 @@ spec:
{{- end }}
ports:
- containerPort: 80
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
- name: app-data
mountPath: /app
+11 -1
View File
@@ -25,4 +25,14 @@ caddyRoot: ""
## @param additionalEnvs Additional environment variables to set
additionalEnvs: {}
## @param storageClassName Set the storage class
storageClassName: ""
storageClassName: ""
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"
+8
View File
@@ -11,3 +11,11 @@ This chart deploys a VSHN Postgres service.
| `enabled` | Enable or disable vshnPostgres | `false` |
| `secretRef` | The secret reference for vshnPostgres | `postgres-creds` |
| `client.enabled` | Enable or disable the vshnPostgres client | `false` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+1 -3
View File
@@ -43,9 +43,7 @@ spec:
- name: postgres-client
image: postgres:16
resources:
limits:
memory: "128Mi"
cpu: "500m"
{{- toYaml .Values.resources | nindent 6 }}
command:
- /bin/sh
- -c
+10
View File
@@ -10,3 +10,13 @@ client:
## @param client.enabled Enable or disable the vshnPostgres client
##
enabled: false
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"
+8
View File
@@ -20,3 +20,11 @@ This Helm chart deploys a Vuepress site.
| ----------------- | ------------------------------ | -------- |
| `image` | The image for Vuepress | `""` |
| `imagePullPolicy` | Pull policy for Vuepress image | `Always` |
### Resources requests and limits
| Name | Description | Value |
| --------------------------- | -------------------------------- | ------- |
| `resources.requests.memory` | Memory request for the container | `500Mi` |
| `resources.requests.cpu` | CPU request for the container | `100m` |
| `resources.limits.memory` | Memory limit for the container | `1Gi` |
+2
View File
@@ -19,3 +19,5 @@ spec:
imagePullPolicy: {{ .Values.imagePullPolicy }}
ports:
- containerPort: 80
resources:
{{- toYaml .Values.resources | nindent 12 }}
+10
View File
@@ -17,3 +17,13 @@ image: ""
## @param imagePullPolicy Pull policy for Vuepress image
##
imagePullPolicy: Always
## @section Resources requests and limits
resources:
## @param resources.requests.memory Memory request for the container
requests:
memory: "500Mi"
## @param resources.requests.cpu CPU request for the container
cpu: "100m"
limits:
## @param resources.limits.memory Memory limit for the container
memory: "1Gi"