Datacenter deploy: rules for contributors and agents
These rules add to the root AGENTS.md; read that first.
deploy/ is the Datacenter profile only (ADR-0012): Kubernetes
add-ons and charts. Solo and Lab installs (Macs, personal Linux machines) use none of it; they run the
einsora binary and node agents. Don’t add Mac or personal-machine support here.
Layout
Section titled “Layout”helmfile.yaml.gotmpl every add-on in install order, grouped by layer, with feature flagscatalog.yaml the Datacenter launch catalog: every region, and only classes Kubernetes can runenvironments/<env>.yaml one file per regional cluster: flags, IPs, GPU devices, storageplatform/<component>/ values files (or kustomizations) for third-party componentscharts/cluster-config/ OUR cluster objects: namespaces, MetalLB pool, issuer, Gateway, KubeVirt/CDI CRs, einsora-vllm runtime, einsora-block StorageClasscharts/einsora/ the control plane (api, controller, metering, migrate Job) and webexamples/ hand-applied smoke tests used by the runbooks- Never apply. Agents run
make deploy-check(helm lint, helm template, kubeconform) and nothing that touches a cluster.helmfile applyandsyncare for humans. - Pin everything. Chart
version:and image tags must be exact; nolatestand no ranges. When you bump a version, read the upstream upgrade notes and record the date inREADME.md#versions. - Free to use (rule 12): only add components that need no licence key or paid tier.
- No secrets in values. Reference Secrets created out of band (
existingSecret,secretKeyRef). List any new one under “Secrets created out of band” inREADME.md. - Keep the control plane in sync. If you change a kind the controller creates, update
charts/einsora/templates/controller.yamlRBAC andcontrolplane/internal/cluster/kube/kube.go(allowed) together. If you changeeinsora.dev/rolenamespace labels, checkcontrolplane/internal/cluster/manifests/tenant.go. - Isolation-sensitive files need a
tenancy-reviewerpass:gpu-operator/values.yaml: never add time-slicing between usersserving-runtime.yaml: keep--load-format=safetensors; never add--trust-remote-code- Gateway
allowedRoutes - anything that grants RBAC
- Order matters. Express dependencies with
needs:. Custom resources go incluster-config, whichneedstheir operators. - Feature flags: a component that isn’t core gets an
installed: {{ .Values.features.<x> }}flag. Add the flag to every environment file. - Regions (ADR-0009): each environment’s
regionmust be listed incatalog.yaml; the chart refuses to render otherwise. Most add-ons deploy into every regional cluster. Mark control-plane-only components (Keycloak, the control plane’s Postgres) as such. A regional cluster must never depend on another region. While there’s one region, its cluster also hosts the control plane. - Fallbacks (ADR-0010): the planned
einsora-vllm-cpuruntime follows the same rules aseinsora-vllm(safetensors only, no remote code). CPU worker nodes get the same isolation runtime classes as GPU nodes.
Commands
Section titled “Commands”make deploy-check # from repo root: lint, render, and validatehelmfile -e single-node template > /tmp/out.yaml # full render (needs helmfile and kustomize)