Skip to content

Add aztec-node chart - #131

Merged
bussyjd merged 31 commits into
mainfrom
feature/aztec-node
Nov 16, 2025
Merged

bussyjd merged 31 commits into
mainfrom
feature/aztec-node

Conversation

@bussyjd

@bussyjd bussyjd commented Oct 7, 2025 •

Copy link
Copy Markdown
Contributor

Summary

This PR integrates the new aztec-node Helm chart.

Changes:

  • Add aztec-node chart to repository: Added chart to main README and created documentation template
  • Update namespace references: Changed all namespace references from aztec to aztec-testnet throughout documentation
  • Fix template rendering issues:
    • Removed invalid role references (prover-node, prover-agent) from main statefulset
    • Fixed volume indentation bug in prover-node statefulset when using existingClaim
  • Generate documentation: Created README.md.gotmpl template and generated complete documentation with helm-docs

Chart Overview:

The aztec-node chart deploys Aztec network nodes in three distinct roles:

  • Full Node - Participates in the network by syncing and validating blocks
  • Sequencer - Produces blocks and participates in consensus
  • Prover - Distributed proving system with 3 components (broker, node, agent)

Role Architecture:

When role: prover is set, the chart deploys 3 separate StatefulSets:

  • statefulset-prover-broker.yaml - Manages job queue
  • statefulset-prover-node.yaml - Creates jobs and publishes proofs to L1
  • statefulset-prover-agent.yaml - Executes proof generation (scalable)

The main statefulset.yaml only handles fullnode and sequencer roles.

Test Plan

  • Chart lints successfully for all three roles (fullnode, sequencer, prover)
  • Pre-commit hooks pass (helm-docs)
  • Documentation generated correctly with values table
  • Template rendering validated with dry-run for each role
  • Volume configuration fixed for prover-node with existingClaim

Deployment Examples

Full Node:

helm install aztec-fullnode ./charts/aztec-node \
  -f charts/aztec-node/values-examples/fullnode.yaml \
  -n aztec-testnet --create-namespace

Sequencer:

helm install aztec-sequencer ./charts/aztec-node \
  -f charts/aztec-node/values-examples/sequencer.yaml \
  --set sequencer.attesterPrivateKey="0xYOUR_KEY" \
  -n aztec-testnet --create-namespace

Prover:

helm install aztec-prover ./charts/aztec-node \
  -f charts/aztec-node/values-examples/prover.yaml \
  --set prover.node.publisherPrivateKey="0xYOUR_KEY" \
  -n aztec-testnet --create-namespace

ticket: none

bussyjd added 5 commits October 7, 2025 15:45
- Add aztec-node to main repository README chart list
- Create README.md.gotmpl template for helm-docs generation
- Update all namespace references from 'aztec' to 'aztec-testnet'
- Generate complete documentation with helm-docs

The aztec-node chart deploys Aztec network nodes in three roles:
- Full Node: Syncs and validates blocks
- Sequencer: Produces blocks and participates in consensus
- Prover: Generates zero-knowledge proofs
Remove checks for "prover-node" and "prover-agent" roles from the main
statefulset.yaml template. These are not valid role values according to
the chart's role validation (_helpers.tpl).

Valid roles are: fullnode, sequencer, prover

The main statefulset.yaml only handles fullnode and sequencer roles.
When role=prover is set, separate StatefulSet templates are used:
- statefulset-prover-broker.yaml
- statefulset-prover-node.yaml
- statefulset-prover-agent.yaml

This fixes template rendering and ensures role validation works correctly.
When persistence.existingClaim is set, the volumes section was missing
the 'volumes:' key, causing incorrect YAML structure. This would prevent
prover-node pods from starting when using an existing PVC.

Added the missing 'volumes:' key to match the pattern used in the
emptyDir case and align with the main statefulset template.
@bussyjd
bussyjd requested a review from a team as a code owner October 7, 2025 12:22
bussyjd added 10 commits October 7, 2025 17:01
Update version badges in charon and charon-cluster READMEs to reflect
current chart versions (v0.4.8 and v0.3.8) and appVersion (v1.6.1).

These changes are automatically generated by helm-docs based on the
Chart.yaml files.
Add a new pre-commit hook that lints Helm charts using the same logic
as the CI workflow. This ensures charts are validated locally before
pushing, catching issues early.

Features:
- Uses CI-specific values files when available
- Skips charts listed in skip-charts.txt
- Ignores harmless dependency warnings for charts with local dependencies
- Provides clear summary of linted, skipped, and failed charts

This matches the behavior of .github/workflows/release.yml to ensure
consistency between local development and CI.
Add minimal CI values configuration for aztec-node chart to enable
automated testing in the release workflow.

Configuration:
- Role: fullnode (simplest role for testing)
- Network: testnet
- Persistence: disabled (not needed for CI)
- Minimal resource requests for fast testing
Regenerate README to reflect updated default role in values.yaml
(changed from fullnode to sequencer) and other recent value updates
including hostNetwork and nodePort configuration.
Fix NodePort service template to use separate nodePort field (30400)
instead of P2P port (40400) to comply with Kubernetes port range
restrictions (30000-32767).

Configure hostNetwork: true as the recommended default for best P2P
performance, matching tested production configuration. NodePort remains
available as a fallback option.

Changes:
- Add service.p2p.nodePort field (default: 30400)
- Set hostNetwork: true as default
- Update svc.nodeport.yaml to use nodePort field
- Update all values-examples to use hostNetwork
- Update README with hostNetwork as default, NodePort as alternative
- Add L1 RPC endpoints to default values.yaml

Validation:
- Tested all 3 roles (fullnode, sequencer, prover)
- Verified role-based validation (required fields enforced)
- Confirmed correct StatefulSet and Service generation
The StatefulSet was referencing the wrong service name. It pointed to
the regular ClusterIP service instead of the headless service, which
prevented pods from getting stable DNS names.

Changes:
- Updated serviceName from {{ fullname }} to {{ fullname }}-headless
- This connects the StatefulSet to the headless service (clusterIP: None)
- Enables stable pod DNS names: pod-0.service.namespace.svc.cluster.local

Also updated README to reflect current values.yaml defaults for L1 URLs.
Add clearer description to helm-docs hook explaining that if files
are modified, the user needs to stage the changes and commit again.
This prevents confusion when README.md is auto-regenerated.
Removed aztec-node from skip-charts.txt now that the chart is fully
configured with CI values file and templates are fixed.
@bussyjd bussyjd changed the title feat: integrate aztec-node chart Add aztec-node chart Oct 7, 2025
bussyjd added 3 commits October 7, 2025 18:59
Changed from ((var++)) to var=$((var + 1)) syntax to avoid exit code 1
when incrementing from 0 with set -e enabled. Also added check to prevent
iterating over empty skip_list array with set -u enabled.
BREAKING CHANGE: All Kubernetes resources now follow the naming pattern:
l2-{role}-node-{network}-{component}

Examples:
- Fullnode: l2-full-node-sepolia-node
- Sequencer: l2-sequencer-node-sepolia-node
- Prover: l2-prover-node-sepolia-{broker|node|agent}

This requires deletion of existing StatefulSets and Services before upgrade.

Changes:
- Add networkName field to values.yaml (default: sepolia)
- Create chart.resourceName helper for standardized naming
- Update all 13 template files to use new naming
- Update README with new service names and kubectl examples
- Update DNS references in prover components
- Update RBAC resource names
Updated README to use correct resource naming pattern:
l2-{role}-node-{networkName}-{component}

Examples now show:
- l2-full-node-sepolia-node (fullnode)
- l2-sequencer-node-sepolia-node (sequencer)
- l2-prover-node-sepolia-broker/node/agent (prover components)

This matches the actual resource names generated by chart.resourceName helper.
@bussyjd
bussyjd requested a review from OisinKyne October 8, 2025 07:47
OisinKyne
OisinKyne previously approved these changes Oct 9, 2025
Comment thread .github/helm-ci-values/skip-charts.txt Resolved
OisinKyne
OisinKyne previously approved these changes Oct 9, 2025
apham0001
apham0001 previously approved these changes Oct 9, 2025
Signed-off-by: JeanDaniel Bussy <jd@obol.tech>
@bussyjd
bussyjd dismissed stale reviews from apham0001 and OisinKyne via 9f1c6ca October 10, 2025 18:19
OisinKyne
OisinKyne previously approved these changes Oct 21, 2025
OisinKyne
OisinKyne previously approved these changes Nov 5, 2025
bussyjd and others added 7 commits November 8, 2025 17:41
* feat: add external Kubernetes secret support for aztec-node attesterPrivateKey

Add support for referencing pre-existing Kubernetes secrets for the sequencer's
attesterPrivateKey, enabling better secrets management for production deployments
on GKE and other platforms.

Changes:
- Add sequencer.attesterPrivateKeySecretName field in values.yaml
- Make Secret resource creation conditional based on configuration method
- Update StatefulSet volume to support both inline and external secrets
- Enhance validation to enforce exactly one secret method (not both, not neither)
- Add comprehensive documentation with usage examples in README

The implementation uses a single field (attesterPrivateKeySecretName) and assumes
the secret key is always "keystore.json" to keep the configuration lean. Users
create secrets with: kubectl create secret --from-file=keystore.json=keystore.json

This maintains full backward compatibility with the existing inline private key
approach while providing a production-ready path for external secret management.

* chore: cleanup

* chore: cleanup

* chore: cleanup

* docs: restore external secrets section in README and add reference in Install section

* docs: re-add external secrets documentation section

The section was removed during merge, restoring it to ensure the link
in the Install a Sequencer section works correctly.

* docs: move external secrets documentation to README.md.gotmpl template

Move the external secrets documentation from manually-edited README.md into
the README.md.gotmpl template to ensure it persists when helm-docs regenerates
the documentation. This prevents the content from being lost during future
documentation generation runs.

* feat: add sequencer mainnet example

---------

Co-authored-by: bussyjd <bussyjd@users.noreply.github.com>
#153)

* feat: simplify Aztec node storage configuration by using built-in defaults

Remove hardcoded storage map size defaults from values.yaml and make environment variables conditional in the template. This reduces configuration complexity while allowing power users to override when needed.

Changes:
- Remove dataStoreMapSize and worldStateMapSize defaults from values.yaml (Aztec uses 128GB by default)
- Make DATA_STORE_MAP_SIZE_KB and WS_DB_MAP_SIZE_KB env vars conditional in statefulset template
- Add documentation comments explaining Aztec's built-in defaults
- Update sequencer-mainnet example to use pinned image tag 2.1.5
- Examples still include storage config for advanced users who need custom tuning

This aligns with Aztec's official documentation which doesn't surface these configuration parameters, letting the node use sensible defaults.

* feat: simplify Aztec node storage configuration by using built-in defaults

Remove hardcoded storage map size defaults from values.yaml and make environment variables conditional in the template. This reduces configuration complexity while allowing power users to override when needed.

Changes:
- Remove dataStoreMapSize and worldStateMapSize defaults from values.yaml (Aztec uses 128GB by default)
- Make DATA_STORE_MAP_SIZE_KB and WS_DB_MAP_SIZE_KB env vars conditional in statefulset template
- Add documentation comments explaining Aztec's built-in defaults
- Update sequencer-mainnet example to use pinned image tag 2.1.5
- Examples still include storage config for advanced users who need custom tuning

This aligns with Aztec's official documentation which doesn't surface these configuration parameters, letting the node use sensible defaults.
#153)

* feat: simplify Aztec node storage configuration by using built-in defaults

Remove hardcoded storage map size defaults from values.yaml and make environment variables conditional in the template. This reduces configuration complexity while allowing power users to override when needed.

Changes:
- Remove dataStoreMapSize and worldStateMapSize defaults from values.yaml (Aztec uses 128GB by default)
- Make DATA_STORE_MAP_SIZE_KB and WS_DB_MAP_SIZE_KB env vars conditional in statefulset template
- Add documentation comments explaining Aztec's built-in defaults
- Update sequencer-mainnet example to use pinned image tag 2.1.5
- Examples still include storage config for advanced users who need custom tuning

This aligns with Aztec's official documentation which doesn't surface these configuration parameters, letting the node use sensible defaults.

* feat: simplify Aztec node storage configuration by using built-in defaults

Remove hardcoded storage map size defaults from values.yaml and make environment variables conditional in the template. This reduces configuration complexity while allowing power users to override when needed.

Changes:
- Remove dataStoreMapSize and worldStateMapSize defaults from values.yaml (Aztec uses 128GB by default)
- Make DATA_STORE_MAP_SIZE_KB and WS_DB_MAP_SIZE_KB env vars conditional in statefulset template
- Add documentation comments explaining Aztec's built-in defaults
- Update sequencer-mainnet example to use pinned image tag 2.1.5
- Examples still include storage config for advanced users who need custom tuning

This aligns with Aztec's official documentation which doesn't surface these configuration parameters, letting the node use sensible defaults.
Update chart version from 0.1.0 to 0.2.0 for minor release with:
- Simplified storage configuration (using Aztec built-in defaults)
- Updated Aztec image from 2.0.2 to 2.1.5
- Conditional storage environment variables in templates

Changes:
- Chart version: 0.1.0 -> 0.2.0
- App version: 2.0.2 -> 2.1.5
- README badges updated to reflect new versions
@agaskrobot
agaskrobot requested a review from OisinKyne November 16, 2025 20:22
@bussyjd
bussyjd merged commit cb8540b into main Nov 16, 2025
3 checks passed
@bussyjd
bussyjd deleted the feature/aztec-node branch November 16, 2025 21:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants