kubernetes/ directory, structured as Kustomize overlays. Each cluster type (L0 and L1) is a separate overlay on top of a shared base. A full observability stack (Prometheus, Grafana, Loki) is provided alongside.
Directory structure
Base resources
The base layer defines avalidator-deployment and an initial-validator Service.
Cluster overlays
L0 cluster
L1 cluster
- Prefixes all resource names (e.g.,
l0-validator-deployment,l1-initial-validator) - Sets the
clusterlabel for selector isolation - Substitutes the
validatorimage with the cluster-specific image - Configures the initial validator node ID via a ConfigMap
Deploying with Kustomize
Namespaces and services
The baseService exposes NodePort ports for the initial validator:
l0-initial-validator. After applying the L1 overlay, it becomes l1-initial-validator. Prometheus uses these service names for service discovery:
ConfigMaps and environment
Node configuration is injected via avalidator-config ConfigMap (generated by Kustomize). Node-specific runtime values are injected directly as environment variables:
| Variable | Source | Description |
|---|---|---|
CL_EXTERNAL_IP | Pod IP (status.podIP) | Announced peer IP |
CL_COLLATERAL | Literal "0" | Node collateral |
INITIAL_VALIDATOR | Literal "1" | Marks the initial (genesis) validator pod |
L0_INITIAL_VALIDATOR_ID | ConfigMap | Node ID of the L0 genesis validator |
L1_INITIAL_VALIDATOR_ID | ConfigMap | Node ID of the L1 genesis validator |
Health checks and readiness probes
All probes hitGET /node/health on the public port (9000):
| Probe | Config | Purpose |
|---|---|---|
| Liveness | httpGet /node/health | Restart pod if the process hangs |
| Readiness | httpGet /node/health | Remove pod from Service until healthy |
| Startup | httpGet /node/health, failureThreshold: 30, periodSeconds: 10 | Give the JVM up to 300 s to start |
Local development with Skaffold
Skaffold is configured for rapid local Kubernetes development:skaffold.yaml file in the project root coordinates image builds for both the L0 and L1 validator images alongside the Kustomize overlay deployments.