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 b38e6c5b46..ea125f437f 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 c1eb943fed..cddabf47cc 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 23a6ad56ce..9c20f9812b 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 1263b864e1..3083f95e67 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 ecc975a5a7..bb40e43646 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).