Deploy an Akash RPC node to your Kubernetes cluster using Helm. This method uses blockchain snapshots for rapid synchronization.
Time: 20-30 minutes (including snapshot download and sync)
Requirements:
- Existing Kubernetes cluster
- Helm 4.0+
- kubectl access
- 100 GB storage (minimum), 1 TB recommended
Step 1 - Prepare Kubernetes Cluster
Create Namespace
kubectl create ns akash-serviceskubectl label ns akash-services akash.network/name=akash-services akash.network=trueInstall Helm
# Download Helmwget https://get.helm.sh/helm-v4.0.1-linux-amd64.tar.gztar -zxvf helm-v4.0.1-linux-amd64.tar.gzinstall linux-amd64/helm /usr/local/bin/helm
# Add Akash Helm repositoryhelm repo add akash https://akash-network.github.io/helm-chartshelm repo update akashStep 2 - Install Akash Node
Install with Default Settings (Recommended)
The default installation uses blockchain snapshots for fast initial sync (~20 minutes for download and extraction, depending on connection speed).
helm install akash-node akash/akash-node -n akash-servicesExpected output:
NAME: akash-nodeNAMESPACE: akash-servicesSTATUS: deployedWhat happens:
- Downloads latest blockchain snapshot from Akash snapshot provider
- Extracts snapshot to node data directory
- Begins syncing from snapshot height to current block
Install with Custom Storage
For production nodes, increase storage allocation:
helm install akash-node akash/akash-node -n akash-services \ --set ceph_storage.enabled=true \ --set ceph_storage.capacity=1000Gi \ --set ceph_storage.storageclass=beta3Install with State Sync (Alternative)
State sync is faster but requires finding reliable RPC endpoints:
helm install akash-node akash/akash-node -n akash-services \ --set state_sync.enabled=true \ --set state_sync.rpc1="https://akash-rpc.polkachu.com:443" \ --set state_sync.rpc2="https://akash-rpc.polkachu.com:443"Step 3 - Verify Node
Check Pod Status
kubectl get pods -n akash-servicesExpected output:
NAME READY STATUS RESTARTS AGEakash-node-1-xxxxx-xxxxx 1/1 Running 0 2mCheck Sync Status
# Get pod namePOD_NAME=$(kubectl get pods -n akash-services -l app=akash-node -o jsonpath='{.items[0].metadata.name}')
# Check statuskubectl exec -n akash-services $POD_NAME -- akash status | jq '.sync_info.catching_up'Expected:
true- Still syncingfalse- Fully synced
Monitor Logs
kubectl logs -n akash-services -l app=akash-node --tail=50 -fPress Ctrl+C to stop following logs.
Access Node RPC
From Within Kubernetes Cluster
export AKASH_NODE="http://$(kubectl -n akash-services get svc akash-node-1 -o jsonpath='{.spec.clusterIP}'):26657"curl -s "$AKASH_NODE/status" | jq '.result.sync_info'From Outside Kubernetes (Port Forward)
# Forward RPC portkubectl -n akash-services port-forward svc/akash-node-1 26657:26657
# In another terminal, test the connectioncurl -s http://127.0.0.1:26657/status | jq '.result.sync_info'Configuration Options
View available configuration options:
helm show values akash/akash-nodeCommon options:
| Option | Default | Description |
|---|---|---|
akash_node.snapshot_provider | akash | Snapshot provider: akash, polkachu, c29r3, or autostake |
state_sync.enabled | false | Enable state sync (alternative to snapshot) |
ceph_storage.enabled | false | Use Ceph block storage |
ceph_storage.capacity | 100Gi | Size of Ceph volume |
ceph_storage.storageclass | akash-nodes | Storage class name |
local_storage.enabled | false | Use local node storage |
local_storage.capacity | 100Gi | Size of local volume |
akash_node.moniker | mynode | Node name |
akash_node.chainid | akashnet-2 | Chain ID |
akash_node.pruning | nothing | Pruning strategy |
Upgrade Node
# Update Helm repositoryhelm repo update akash
# Upgrade nodehelm upgrade akash-node akash/akash-node -n akash-servicesUninstall Node
helm -n akash-services uninstall akash-nodeNote: This does not delete the persistent volume claim. To remove it:
kubectl -n akash-services delete pvc data-akash-node-1-0Next Steps
- For Validators: See Running a Validator
- For Providers: Configure provider to use this node as RPC endpoint
- For dApps: Use the node’s cluster IP or port-forward for local development
Questions? Join #validators on Discord