diff --git a/apps/docs/client/src/content/deco-studio/en/studio/self-hosting/deploy/kubernetes.mdx b/apps/docs/client/src/content/deco-studio/en/studio/self-hosting/deploy/kubernetes.mdx index 0b47b0db45..c7dfb92353 100644 --- a/apps/docs/client/src/content/deco-studio/en/studio/self-hosting/deploy/kubernetes.mdx +++ b/apps/docs/client/src/content/deco-studio/en/studio/self-hosting/deploy/kubernetes.mdx @@ -242,6 +242,26 @@ If `sentinel.token` is omitted, the chart generates and preserves a Secret for s The optional warm-pool HPA requires `warmPool.enabled: true`, `warmPool.autoscaling.enabled: true`, and at least one explicit `autoscaling/v2` metric. The chart intentionally provides no default metric. +### Shared dependency cache (golden uploader) + +`depsCache.golden` caches installed dependencies node-locally: the first sandbox on a node to install a given (repo, lockfile) pair pays the cost, and later sandboxes on that same node reflink from it. That cache is per-node and starts empty on every new node. + +`goldenUploader` (disabled by default) closes the gap by running a DaemonSet that carries each node's local goldens into a shared, cross-node store, so a sandbox landing on a fresh node can extract a golden another node already produced instead of installing from scratch. A sandbox pod's mount into that shared store is read-only by design, so the uploader — not tenant code — is the only writer. + +```yaml +depsCache: + enabled: true + golden: true + remote: + enabled: true + +goldenUploader: + enabled: true + intervalSeconds: 300 +``` + +Enabling `goldenUploader` requires `depsCache.enabled` and `depsCache.remote.enabled`, plus a writable volume: either the chart's own PV/PVC, or an existing claim supplied via `goldenUploader.pvcName` (mandatory when `depsCache.remote.storageClassName` is set, since a dynamic StorageClass cannot express the read-only/read-write split this relies on). Goldens are stamped and keyed per organization, so two orgs cloning the same public template never share a cached archive. This feature is additive — clusters that leave it disabled see no behavior change. + ### Idle housekeeper Studio refreshes claim activity, while the optional housekeeper CronJob cleans up idle or unrecoverable claims and orphaned routes/pods. Its defaults run every five minutes and reap claims idle for 15 minutes. @@ -323,6 +343,7 @@ These defaults come from `deploy/helm/studio/values.yaml`: | `netinit.enabled` | Install default iptables egress policy | `true` | | `readOnlyRootFilesystem` | Read-only sandbox root filesystem | `true` | | `depsCache.enabled` / `depsCache.golden` | Node-local dependency caches | `false` / `false` | +| `goldenUploader.enabled` | DaemonSet publishing node-local goldens to the shared cross-node store | `false` | | `warmPool.enabled` / `warmPool.size` | Pre-warmed sandboxes | `false` / `0` | | `previewGateway.enabled` | Wildcard preview Gateway | `false` | | `housekeeper.enabled` | Idle-claim cleanup CronJob | `false` | diff --git a/apps/docs/client/src/content/deco-studio/pt-br/studio/self-hosting/deploy/kubernetes.mdx b/apps/docs/client/src/content/deco-studio/pt-br/studio/self-hosting/deploy/kubernetes.mdx index 0d18b35418..12e19e4f14 100644 --- a/apps/docs/client/src/content/deco-studio/pt-br/studio/self-hosting/deploy/kubernetes.mdx +++ b/apps/docs/client/src/content/deco-studio/pt-br/studio/self-hosting/deploy/kubernetes.mdx @@ -242,6 +242,26 @@ Se `sentinel.token` for omitido, o chart gera e preserva um Secret para os pods, O HPA opcional do warm pool exige `warmPool.enabled: true`, `warmPool.autoscaling.enabled: true` e pelo menos uma métrica explícita no formato `autoscaling/v2`. O chart intencionalmente não fornece uma métrica padrão. +### Cache de dependências compartilhado (golden uploader) + +`depsCache.golden` faz cache de dependências instaladas em nível de node: o primeiro sandbox de um node a instalar um determinado par (repo, lockfile) paga o custo, e sandboxes seguintes no mesmo node fazem reflink a partir dele. Esse cache é por node e começa vazio em todo node novo. + +O `goldenUploader` (desabilitado por padrão) fecha essa lacuna executando um DaemonSet que leva os goldens locais de cada node para um armazenamento compartilhado entre nodes, de modo que um sandbox que caia em um node novo possa extrair um golden que outro node já produziu, em vez de instalar do zero. O mount de um pod de sandbox nesse armazenamento compartilhado é somente leitura por design, então o uploader — e não o código do tenant — é o único que escreve nele. + +```yaml +depsCache: + enabled: true + golden: true + remote: + enabled: true + +goldenUploader: + enabled: true + intervalSeconds: 300 +``` + +Habilitar `goldenUploader` requer `depsCache.enabled` e `depsCache.remote.enabled`, além de um volume gravável: o próprio PV/PVC do chart, ou um claim existente fornecido via `goldenUploader.pvcName` (obrigatório quando `depsCache.remote.storageClassName` está definido, já que uma StorageClass dinâmica não consegue expressar a separação leitura-somente/leitura-gravação usada aqui). Os goldens são marcados e indexados por organização, então dois orgs que clonam o mesmo template público nunca compartilham um archive em cache. Esse recurso é aditivo — clusters que o deixam desabilitado não têm nenhuma mudança de comportamento. + ### Housekeeper de recursos ociosos O Studio atualiza a atividade dos claims, enquanto o CronJob housekeeper opcional remove claims ociosos ou irrecuperáveis, além de routes e pods órfãos. Os padrões executam a cada cinco minutos e removem claims ociosos há 15 minutos. @@ -323,6 +343,7 @@ Estes padrões vêm de `deploy/helm/studio/values.yaml`: | `netinit.enabled` | Instalar política padrão de egress no iptables | `true` | | `readOnlyRootFilesystem` | Root filesystem do sandbox somente leitura | `true` | | `depsCache.enabled` / `depsCache.golden` | Caches de dependências locais ao node | `false` / `false` | +| `goldenUploader.enabled` | DaemonSet que publica goldens locais no armazenamento compartilhado entre nodes | `false` | | `warmPool.enabled` / `warmPool.size` | Sandboxes pré-aquecidos | `false` / `0` | | `previewGateway.enabled` | Gateway wildcard de preview | `false` | | `housekeeper.enabled` | CronJob de limpeza de claims ociosos | `false` |