Deployment Models¶
Atlas deployment models are defined by profile intent, concrete values, required tools and services, allowed effects, cluster shape, and evidence. They are not maturity labels. Every supported model preserves the same publication boundary: the runtime serves an explicit catalog and immutable store state.
Profile Selection¶
flowchart TD
Need[Operational intent] --> Profile[Select named profile]
Profile --> Inputs[Resolve cluster config, values, tools, services, effects]
Inputs --> Render[Render Helm resources]
Render --> Validate[Schema, policy, and conformance checks]
Validate --> Install[Install, upgrade, or rollback scenario]
Install --> Evidence[Probe, telemetry, load, and rollout evidence]
ops/stack/profiles.json defines local stack footprint. profile-intent.json
defines why a profile exists and which effects it permits.
profile-registry.json adds safety level, required tools, namespaces, services,
and source paths. ops/k8s/install-matrix.json binds Kubernetes values to
install, upgrade, rollback, and validation suites.
Resolve One Deployment Identity¶
A shared profile name is a join key, not a complete deployment description.
For example, kind appears in the intent, cluster-footprint, registry, and
Kubernetes sources, while local appears in the concrete service composition
without appearing in the intent registry. Operators must resolve the sources
that actually participate in the run and retain their content identities.
flowchart LR
Intent["Intent and allowed effects"] --> Identity["Resolved deployment identity"]
Footprint["Cluster footprint"] --> Identity
Registry["Tools, namespaces, and services"] --> Identity
Values["Helm values and install suite"] --> Identity
Composition["Concrete dependency graph"] --> Identity
Target["Target capability record"] --> Identity
Identity --> Receipt["Qualification receipt"]
The receipt should contain the selected name plus the digests or commit identity of every resolved source, the rendered-resource digest, cluster identity, allowed-effect grant, and evidence window. A run is not equivalent merely because two commands accepted the same profile string.
| Mismatch | Correct interpretation |
|---|---|
| intent exists but no concrete composition exists | the policy is selectable, but no checked-in service graph proves its assembled topology |
| composition exists but no intent entry exists | the topology can be assembled, but its effect policy must be supplied and recorded separately |
| registry services differ from the generated graph | the profile contract and observed composition disagree; qualification must stop |
| values or target capability change under the same name | a new deployment identity requires new target-dependent evidence |
Bind the Profile to a Real Target¶
Profile selection ends when the effective target is identified, not when a profile name is parsed. Two clusters using the same values can differ in admission mutation, storage, scheduling, identity, network enforcement, and external dependency behavior.
| Target property | Why it belongs in qualification |
|---|---|
| cluster identity and Kubernetes version | prevents evidence from moving between unrelated or incompatible control planes |
| node classes and failure domains | bounds scheduling, capacity, churn, and availability claims |
| storage classes and object-store service | establishes persistence, consistency, latency, backup, and recovery ownership |
| ingress, DNS, and network enforcement | identifies the actual client path, TLS boundary, timeouts, and isolation behavior |
| workload identity and secret providers | establishes principals, credential generations, rotation, and revocation paths |
| telemetry destinations and retention | establishes whether required evidence is queryable for the decision window |
| admission and policy controllers | exposes defaults or mutations between rendered intent and admitted objects |
flowchart LR
Profile[Named Atlas profile] --> Render[Rendered intent]
Target[Target capability record] --> Admit[Admission and deployment]
Render --> Admit
Admit --> Observe[Observed resources and service]
Observe --> Qualify{Target-specific evidence passes?}
Qualify -->|yes| Accepted[Bound deployment claim]
Qualify -->|no| Hold[Hold or narrow the claim]
The target capability record must be versioned with the evidence it qualifies.
An environment label such as prod or kind is not a substitute for these
observations. Requalify after a cluster upgrade, storage migration, ingress or
identity change, admission-policy change, or failure-domain redesign.
Local and Validation Profiles¶
| Profile | Intended use | Required dependencies | Evidence limit |
|---|---|---|---|
minimal |
smallest supported contract footprint | Kind cluster and rendered manifests | not production or resilience proof |
small |
quick constrained local validation | Kind cluster and rendered manifests | no full telemetry claim |
ci |
deterministic automated validation | Kind cluster and rendered manifests | restricted effects; targeted install evidence |
kind |
baseline local cluster and smoke checks | cluster, rendered manifests, health endpoint | standard local integration evidence |
dev |
iterative local development | cluster, rendered manifests, health endpoint | allows networked local workflows |
developer |
workstation cluster with standard ergonomics | cluster, rendered manifests, health endpoint | development evidence only |
perf |
performance baseline and autoscaling checks | cluster, rendered manifests, metrics server, health endpoint | strict profile; requires load and metrics evidence |
The concrete stack manifest currently expands ci and local with the Atlas
chart, operations namespace, MinIO, and Redis. The kind stack adds Prometheus,
Grafana, and OpenTelemetry. A profile appearing in an intent registry does not
mean every operational component is present; the generated dependency graph is
the resolved component evidence.
Kubernetes Delivery Profiles¶
The install matrix also covers ingress, multi-registry, offline, and
prod values. These are Kubernetes delivery concerns rather than extra local
stack classes.
| Delivery concern | Required proof |
|---|---|
| baseline install | schema-valid values, rendered resources, install suite |
| ingress | explicit ingress values, routing and security review, nightly evidence |
| multi-registry | pinned image sources and pull behavior across registries |
| offline | locally available images and artifacts, no hidden network dependency |
| performance | metrics prerequisites, autoscaling configuration, governed load evidence |
| production | security context, network policy, resource, availability, backup, and rollback review |
Promotion Is Not Inheritance¶
flowchart LR
Local[Local or CI evidence] --> Candidate[Release candidate]
Candidate --> Rendered[Target-profile render]
Rendered --> Security[Security and policy validation]
Security --> Runtime[Target-environment probes and telemetry]
Runtime --> Load[Relevant load and failure scenarios]
Load --> Rollback[Upgrade and rollback evidence]
Rollback --> Promote[Promotion decision]
Evidence from a smaller profile proves only that profile's contract. It cannot be inherited as production readiness. Promotion requires the target profile's rendered identity and all evidence demanded by its security, telemetry, capacity, and recovery posture.
Qualification Boundary by Model¶
The same runtime can move through several deployment models while the environmental claim changes. Use each model for the conclusions it can actually establish.
| Model | What is held authoritative | Suitable conclusions | Conclusions that require another model |
|---|---|---|---|
| repository and render validation | source, schema, profiles, chart inputs, and rendered objects | deterministic inputs, policy, and dependencies | runtime or recovery behavior |
ci composition |
pinned local composition and restricted effects | repeatable install and targeted integration | full telemetry, target capacity, or external ownership |
kind composition |
local cluster, telemetry, MinIO, Redis, and profile | lifecycle, probes, and local load | target durability, identity, network, or failure domains |
| target environment | observed resources and dependency contracts | security, capacity, rollout, rollback, and recovery | another target or unexercised failure domain |
flowchart LR
R["Repository and render evidence"] --> C["CI composition evidence"]
C --> K["Kind lifecycle and integration evidence"]
K --> T["Target-environment evidence"]
R -. unchanged inputs may transfer .-> T
C -. environment conclusions must be repeated .-> T
K -. local dependency conclusions must be repeated .-> T
Transfer a result only when its authority and relevant inputs remain unchanged. For example, schema validity may transfer with identical bytes, while storage durability, workload identity, ingress behavior, and capacity must be established against the services and failure domains that own those properties.
Evidence Transfer¶
| Earlier evidence | Reusable conclusion | Must be repeated for the target |
|---|---|---|
| source and schema validation | authored inputs satisfy repository contracts | target-specific values and overlays |
| deterministic render for another profile | chart templates can produce valid objects | target resource inventory and policy result |
| local functional result | product path works for recorded local dependencies | target networking, storage, identity, and traffic path |
| lower-scale load result | scenario and query pack can execute | target capacity, autoscaling, saturation, and recovery budgets |
| prior release rollback | recovery workflow has a known shape | candidate-to-previous compatibility in the target profile |
Evidence is reusable when the authority and unchanged inputs are identical. Environment-dependent conclusions are not portable merely because the runtime binary is the same.
External Dependency Handoff¶
The Atlas profile controls only the assets it owns. A production decision must also name the operator for every service supplied by the environment:
| Dependency | Atlas needs | Environment owner must establish |
|---|---|---|
| object store | immutable object reads and catalog access | durability, credentials, encryption, backup, restore, and consistency behavior |
| ingress and DNS | stable routing to eligible instances | TLS policy, name ownership, timeout behavior, and traffic rollback |
| workload identity | least-privilege access to dependencies | principal lifecycle, credential rotation, revocation, and audit trail |
| telemetry backend | accepted logs, metrics, and traces | retention, query availability, access control, and loss detection |
| cluster services | scheduling, storage, metrics, and network enforcement | supported versions, capacity, admission policy, and failure ownership |
Record the provider, service identity, escalation route, recovery objective, and evidence source for each dependency. “Managed elsewhere” is a deployment fact, not an ownership answer. If an external service is required for readiness, correctness, or promotion evidence, its failure policy belongs in the target profile's operating record.
Non-Negotiable Boundaries¶
- Serve from published store state, never directly from an ingest build root.
- Keep runtime, dataset, chart, values, dependency, and toolchain identity reviewable together.
- Treat readiness as traffic admission, not as complete performance proof.
- Record relaxed security, network, or admin behavior as an explicit exception.
- Prove rollback against the same release and profile identities used for promotion.
The selected model should also document who owns external dependencies. A managed object store, ingress, identity provider, or telemetry backend may sit outside the Atlas composition while remaining inside the release decision.
Continue with Install Matrix, Render and Validate, and Rollout Safety.