From 0124ba3f5d94890fafc4e62d4ee726e5b617e174 Mon Sep 17 00:00:00 2001 From: rharkor Date: Tue, 2 Sep 2025 17:18:00 +0200 Subject: [PATCH 1/4] feat: cpu/meme request override --- apps/supervisor/src/workloadManager/kubernetes.ts | 4 ++-- packages/core/src/v3/schemas/common.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/supervisor/src/workloadManager/kubernetes.ts b/apps/supervisor/src/workloadManager/kubernetes.ts index b38e6c5b46f..ea125f437f2 100644 --- a/apps/supervisor/src/workloadManager/kubernetes.ts +++ b/apps/supervisor/src/workloadManager/kubernetes.ts @@ -296,8 +296,8 @@ export class KubernetesWorkloadManager implements WorkloadManager { #getResourceRequestsForMachine(preset: MachinePreset): ResourceQuantities { return { - cpu: `${preset.cpu * 0.75}`, - memory: `${preset.memory}G`, + cpu: `${preset.cpuRequest ?? preset.cpu * 0.75}`, + memory: `${preset.memoryRequest ?? preset.memory}G`, }; } diff --git a/packages/core/src/v3/schemas/common.ts b/packages/core/src/v3/schemas/common.ts index c1eb943fed2..cddabf47cc8 100644 --- a/packages/core/src/v3/schemas/common.ts +++ b/packages/core/src/v3/schemas/common.ts @@ -118,8 +118,10 @@ export const MachinePreset = z.object({ name: MachinePresetName, /** unit: vCPU */ cpu: z.number(), + cpuRequest: z.number().optional(), // Only used for k8s fallback to cpu /** unit: GB */ memory: z.number(), + memoryRequest: z.number().optional(), // Only used for k8s fallback to memory centsPerMs: z.number(), }); From aea8378cc08e5fe8493f3cd50121a79b5113c461 Mon Sep 17 00:00:00 2001 From: rharkor Date: Tue, 2 Sep 2025 17:36:32 +0200 Subject: [PATCH 2/4] feat: cpu/mem request override for kubernetes provider --- apps/kubernetes-provider/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/kubernetes-provider/src/index.ts b/apps/kubernetes-provider/src/index.ts index 23a6ad56ce3..9c20f9812ba 100644 --- a/apps/kubernetes-provider/src/index.ts +++ b/apps/kubernetes-provider/src/index.ts @@ -545,8 +545,8 @@ class KubernetesTaskOperations implements TaskOperations { #getResourceRequestsForMachine(preset: MachinePreset): ResourceQuantities { return { - cpu: `${preset.cpu * 0.75}`, - memory: `${preset.memory}G`, + cpu: `${preset.cpuRequest ?? preset.cpu * 0.75}`, + memory: `${preset.memoryRequest ?? preset.memory}G`, }; } From 6e21e0106b62b187e3a8f40fce2e98673d104efc Mon Sep 17 00:00:00 2001 From: rharkor Date: Tue, 2 Sep 2025 18:22:47 +0200 Subject: [PATCH 3/4] fix: override parsing --- apps/webapp/app/services/platform.v3.server.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/webapp/app/services/platform.v3.server.ts b/apps/webapp/app/services/platform.v3.server.ts index 1263b864e15..3083f95e67b 100644 --- a/apps/webapp/app/services/platform.v3.server.ts +++ b/apps/webapp/app/services/platform.v3.server.ts @@ -80,7 +80,9 @@ type Machines = typeof machinesFromPlatform; const MachineOverrideValues = z.object({ cpu: z.number(), + cpuRequest: z.number().optional(), // Only used for k8s fallback to cpu memory: z.number(), + memoryRequest: z.number().optional(), // Only used for k8s fallback to memory }); type MachineOverrideValues = z.infer; From 77edb1fecd57164b61efd6e69edb48ad983be2d5 Mon Sep 17 00:00:00 2001 From: rharkor Date: Tue, 2 Sep 2025 19:03:02 +0200 Subject: [PATCH 4/4] docs: self host machine override --- docs/self-hosting/overview.mdx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/self-hosting/overview.mdx b/docs/self-hosting/overview.mdx index ecc975a5a7f..bb40e436465 100644 --- a/docs/self-hosting/overview.mdx +++ b/docs/self-hosting/overview.mdx @@ -41,7 +41,6 @@ While [limits](#limits) are generally configurable when self-hosting, some featu | Community support | ✅ | ✅ | Access to our Discord community | | ARM support | ✅ | ✅ | ARM-based deployments | - ## Limits Most of the [limits](/limits) are configurable when self-hosting, with some hardcoded exceptions. You can configure them via environment variables on the [webapp](/self-hosting/env/webapp) container. @@ -92,6 +91,18 @@ All fields are optional. Partial overrides are supported: } ``` +You can also set cpu/memory requests for each machine type. This is used in k8s environments to set the minimum resources required for each machine type. +We do not recommend setting these values to zero, as it can cause the k8s scheduler to schedule an infinite number of pods in parallel and cause the pods to get killed due to resource exhaustion. + +```json +{ + "defaultMachine": "small-2x", + "machines": { + "small-1x": { "cpu": 0.5, "memory": 0.5, "cpuRequest": 0.25, "memoryRequest": 0.25 } + } +} +``` + ## Community support It's dangerous to go alone! Join the self-hosting channel on our [Discord server](https://discord.gg/NQTxt5NA7s).