Skip to content

Add Helm deployment examples and lifecycle testing #15

Description

@nerdalert

Background

Commit 262d030 adds the initial upstream Helm deployment foundation:

  • a grid-operator chart;
  • a temporary praxis-gateway workload chart owned by Grid for integration testing;
  • strict lint, schema, template, CRD synchronization, packaging, and Kind lifecycle validation;
  • Helm-based deployment in the global ingress demo; and
  • versioned OCI publication of the Grid operator chart from the release workflow.

The charts are sufficient for development and demonstrated integration, but a supported deployment contract, maintained deployment examples, and broader lifecycle qualification remain productization work.

Goal

Define and qualify a clear Helm installation path for Grid on standard Kubernetes while keeping ownership boundaries explicit:

  • Grid owns the Grid operator chart and Grid CRDs.
  • Grid temporarily carries the Praxis gateway workload chart so the integration can be installed and tested from one repository.
  • A future Praxis gateway operator should eventually own gateway deployment and lifecycle.
  • Forge may create local Kind infrastructure and invoke Helm, but Helm must also work independently against existing clusters.

Required deployment examples

Add maintained, versioned examples under a common deployment-examples directory. Each example must provide values files, commands, architecture, expected resources, validation, teardown, and an explicit statement of what it proves.

1. Local Kind simulation

  • Use Forge to create the required single-node Kind clusters.
  • Install the Grid operator and Praxis gateway charts through Forge Helm steps.
  • Use mock inference providers and generated demo credentials.
  • Support both the short validation path and the complete failure/recovery demonstration.
  • Remain the primary reproducible development and CI scenario.

2. Private multi-cluster Grid without global ingress

  • Target existing Kubernetes clusters rather than creating them.
  • Provide an example topology of four clusters with two logical edge gateways and two provider sites.
  • Configure inter-cluster SWIM reachability, gateway mTLS, provider credentials, and routing overlays.
  • Expose each edge through a user-selected private Service type or address.
  • Require the client or an existing private traffic manager to select an edge; the example does not install global DNS or ingress steering.
  • Prove distributed provider discovery, edge-local overlay rendering, intelligent provider selection, remote-provider fallback, and credential isolation.

This example must remain genuinely multi-cluster. A single-cluster gateway installation without distributed Grid state belongs in Praxis gateway documentation and is not a Grid deployment example.

3. Multi-cluster Grid with global ingress

  • Provide the Helm equivalent of the existing global ingress demo topology.
  • Keep the traffic-manager component replaceable and separate from Grid provider selection.
  • Document edge withdrawal, provider drain, provider failure, overlay convergence, and recovery evidence.
  • Clearly distinguish demonstration components from infrastructure supplied by a production environment.

Installation contract

  • Document installs from a local chart checkout and from the versioned OCI chart.
  • Require an explicit Praxis gateway image tag or digest; do not imply that Grid publishes a default Praxis image.
  • Prefer immutable image digests in reproducible examples.
  • Document required namespaces, ServiceAccounts, ClusterRoles, RoleBindings, Services, Secrets, ConfigMaps, and CRDs.
  • Keep additional namespace access explicit through resourceNamespaces.
  • Document SWIM bind, advertise, seed, and Service settings for existing clusters.
  • Document provider gateway configuration, routing-overlay mounts, TLS mounts, and credential mounts.
  • Provide preflight checks for cluster access, Kubernetes version, Helm version, image access, DNS, required ports, and cross-cluster reachability.

Lifecycle and security requirements

  • Qualify fresh install, idempotent upgrade, rollback, uninstall, and reinstall.
  • Document that Helm does not upgrade or remove CRDs automatically and provide a deliberate CRD upgrade procedure.
  • Preserve custom resources when uninstalling the chart.
  • Confirm generated resources work under restricted pod security settings without fixed platform-specific assumptions.
  • Keep containers non-root with a read-only root filesystem, dropped capabilities, and a runtime-default seccomp profile.
  • Test existing and chart-created ServiceAccounts.
  • Test RBAC access in the release namespace, explicitly added namespaces, and an unauthorized namespace.
  • Never render credential values into chart output, release notes, logs, or evidence.
  • Keep the operator at one replica until multi-replica controller operation is qualified.

CI and release requirements

The current Helm workflow already runs on pull requests, merge queues, and pushes to main. Preserve and extend these gates:

  • helm lint --strict for every chart;
  • default and representative helm template renderings;
  • JSON Schema rejection tests for invalid and unknown values;
  • Kubernetes schema validation of rendered resources;
  • byte-for-byte CRD synchronization checks;
  • chart packaging checks;
  • Kind install, readiness, helm test, upgrade, rollback where practical, uninstall, and CRD-retention checks;
  • uploaded rendered manifests and failure logs with no Secret data; and
  • pinned actions and checksummed downloaded tools.

Release validation must ensure:

  • chart version matches the release version;
  • appVersion matches the released Grid operator version;
  • only versioned OCI artifacts are published;
  • no latest tag is created;
  • release notes contain the chart reference, version, digest, and install command; and
  • pull-request workflows never receive package-write permission or publish artifacts.

Documentation

  • Add an example-selection table explaining when to use each topology.
  • Keep the chart values reference synchronized with values.yaml and values.schema.json.
  • Document chart ownership and the temporary nature of the Praxis gateway chart.
  • Document image compatibility requirements between Grid, Praxis, and mock providers.
  • Include troubleshooting for image pulls, SWIM discovery, gateway readiness, overlay mounts, TLS, RBAC, and CRD upgrades.
  • Avoid claiming that a chart lifecycle test using a placeholder gateway image proves Praxis runtime behavior; point to the global ingress runtime demo for that proof.

Acceptance criteria

  • All three deployment examples exist and use the shipped charts.
  • Every example has copy-and-paste install, verification, and teardown commands.
  • The private four-cluster example proves Grid behavior without requiring global ingress.
  • The global-ingress example retains the current runtime assertions and machine-readable evidence.
  • Local checkout and versioned OCI installation paths are tested.
  • CI runs strict static validation and Kind lifecycle validation for both charts.
  • Upgrade, rollback, uninstall, reinstall, and CRD lifecycle behavior are documented and tested.
  • RBAC and Secret boundaries have positive and negative coverage.
  • Chart and container compatibility is documented with immutable references.
  • Remaining gateway-operator ownership and migration work is explicitly tracked rather than hidden in the temporary chart.

Out of scope

  • Building a global DNS or traffic-management service.
  • Automating customer network connectivity or firewall configuration.
  • Multi-cluster application lifecycle management outside the Grid components.
  • Moving the temporary Praxis gateway chart to its eventual owning repository in this issue.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

  • Status
    In Progress

Relationships

None yet

Development

No branches or pull requests

Issue actions