|
1 | | -# Fennel Node Helm Chart |
| 1 | +# Fennel Node Helm Chart (Production) |
2 | 2 |
|
3 | | -This Helm chart deploys Fennel blockchain validator nodes on Kubernetes, following Polkadot SDK ecosystem standards. |
4 | | - |
5 | | -## Overview |
6 | | - |
7 | | -The chart uses Parity's official node chart (v5.15.0) as a dependency and provides Fennel-specific configurations for both development and staging environments. |
| 3 | +This Helm chart deploys a Fennel node on Kubernetes for the production Fennel chain. It is production-only and ships a single `values.yaml` for launching your own node. |
8 | 4 |
|
9 | 5 | ## Prerequisites |
10 | 6 |
|
11 | 7 | - Kubernetes 1.23+ |
12 | 8 | - Helm 3.13+ |
13 | | -- PV provisioner support in the underlying infrastructure (for persistent storage) |
14 | | -- A configured StorageClass (e.g., `local-path`, `fast-ssd`) |
| 9 | +- PV provisioner in your cluster (for persistent storage) |
15 | 10 |
|
16 | | -## Installation |
| 11 | +## Install |
17 | 12 |
|
18 | | -### Add the Helm repository |
| 13 | +Add repository and install: |
19 | 14 |
|
20 | 15 | ```bash |
21 | 16 | helm repo add fennel https://corruptedaesthetic.github.io/fennel-solonet |
22 | 17 | helm repo update |
23 | | -``` |
24 | 18 |
|
25 | | -### Install the chart |
26 | | - |
27 | | -For development environment: |
28 | | -```bash |
29 | | -helm install fennel-dev fennel/fennel-node \ |
30 | | - --namespace fennel-dev \ |
| 19 | +helm install fennel-node fennel/fennel-node \ |
| 20 | + --namespace fennel \ |
31 | 21 | --create-namespace |
32 | 22 | ``` |
33 | 23 |
|
34 | | -For staging environment: |
35 | | -```bash |
36 | | -helm install fennel-staging fennel/fennel-node \ |
37 | | - --namespace fennel-staging \ |
38 | | - --create-namespace \ |
39 | | - -f values-staging.yaml |
40 | | -``` |
41 | | - |
42 | | -## Configuration |
43 | | - |
44 | | -The chart provides two configuration files: |
45 | | - |
46 | | -- `values.yaml` - Base configuration with development defaults |
47 | | -- `values-staging.yaml` - Production-grade settings for staging environment |
48 | | - |
49 | | -### Key Configuration Options |
50 | | - |
51 | | -| Parameter | Description | Default | |
52 | | -|-----------|-------------|---------| |
53 | | -| `image.repository` | Docker image repository | `ghcr.io/corruptedaesthetic/fennel-solonet` | |
54 | | -| `image.tag` | Docker image tag | Set by CI pipeline | |
55 | | -| `chainspec.file` | Chain specification file | `development.json` | |
56 | | -| `node.image.repository` | Node image repository (overrides base image) | Same as `image.repository` | |
57 | | -| `node.node.chainData.storageClass` | Storage class for chain data PV | `fast-ssd` | |
58 | | -| `node.node.chainData.volumeSize` | Size of persistent volume | `100Gi` | |
59 | | -| `node.node.chainSnapshot.enabled` | Enable snapshot restoration | `false` (true in staging) | |
60 | | -| `node.serviceMonitor.enabled` | Enable Prometheus monitoring | `false` (true in staging) | |
61 | | - |
62 | | -### Major Changes in v0.2.0 |
63 | | - |
64 | | -**Breaking Changes**: This version upgrades from Parity node chart v0.10.0 to v5.15.0, which includes significant structural changes: |
65 | | - |
66 | | -1. **Storage Class Configuration**: Now configured at `node.node.chainData.storageClass` instead of root level |
67 | | -2. **Service Configuration**: Services are now configured under `node.node.perNodeServices` |
68 | | -3. **Chainspec Mounting**: Custom chainspec is mounted via `extraVolumes` and `extraVolumeMounts` |
69 | | -4. **Node Keys**: Configured via `node.node.existingNodeKeySecret` and `node.node.keys` |
70 | | - |
71 | | -### Staging Environment Features |
72 | | - |
73 | | -The staging configuration enables: |
74 | | - |
75 | | -1. **Persistent Storage**: 100Gi volume with local-path storage class |
76 | | -2. **Snapshot Restoration**: Automatic chain data restoration from snapshots |
77 | | -3. **Secure Key Management**: Integration with Kubernetes Secrets for validator keys |
78 | | -4. **Service Segmentation**: Separate services for API and P2P traffic |
79 | | -5. **Monitoring**: Prometheus ServiceMonitor for metrics collection |
80 | | - |
81 | | -## CI/CD Integration |
82 | | - |
83 | | -The chart is automatically packaged and published by the GitHub Actions workflow when changes are pushed to the main branch. The workflow: |
84 | | - |
85 | | -1. Builds the Docker image with srtool |
86 | | -2. Generates chain specifications |
87 | | -3. Updates Helm values with the correct image tag |
88 | | -4. Lints and packages the chart |
89 | | -5. Publishes to GitHub Pages Helm repository |
90 | | - |
91 | | -## Local Development |
92 | | - |
93 | | -To test the chart locally: |
94 | | - |
95 | | -```bash |
96 | | -# Update dependencies |
97 | | -helm dependency update Charts/fennel-node |
98 | | - |
99 | | -# Run the test script |
100 | | -./scripts/test-helm-chart.sh |
101 | | - |
102 | | -# Or manually: |
103 | | -helm lint Charts/fennel-node |
104 | | -helm lint Charts/fennel-node -f Charts/fennel-node/values-staging.yaml |
105 | | -helm template fennel-test Charts/fennel-node -f Charts/fennel-node/values-staging.yaml |
106 | | -``` |
107 | | - |
108 | | -## Upgrading from v0.1.x |
| 24 | +The chart defaults to connecting to the production network via the released `production-raw.json` chainspec. Override any field in `values.yaml` as needed. |
109 | 25 |
|
110 | | -When upgrading from v0.1.x to v0.2.x, note the following breaking changes: |
| 26 | +## Key values |
111 | 27 |
|
112 | | -1. Update your custom values files to use the new structure |
113 | | -2. Storage class is now at `node.node.chainData.storageClass` |
114 | | -3. Services configuration has moved to `node.node.perNodeServices` |
115 | | -4. Update any scripts or CI/CD pipelines that reference the old paths |
| 28 | +- `image.repository` / `image.tag`: Docker image for `fennel-node` (CI sets tag on release) |
| 29 | +- `node.chain`: fixed to `production` |
| 30 | +- `node.customChainspecUrl`: defaults to the latest published `production-raw.json` |
| 31 | +- `node.chainData.storageClass` and `node.chainData.volumeSize`: persistent storage |
| 32 | +- `node.perNodeServices`: exposes API (RPC/metrics) and P2P |
116 | 33 |
|
117 | | -## Troubleshooting |
118 | | - |
119 | | -### Check pod status |
120 | | -```bash |
121 | | -kubectl get pods -n fennel-staging |
122 | | -kubectl describe pod <pod-name> -n fennel-staging |
123 | | -``` |
124 | | - |
125 | | -### View logs |
126 | | -```bash |
127 | | -kubectl logs -n fennel-staging -l app.kubernetes.io/name=node |
128 | | -``` |
129 | | - |
130 | | -### Check persistent volume |
131 | | -```bash |
132 | | -kubectl get pvc -n fennel-staging |
133 | | -kubectl describe pvc -n fennel-staging |
134 | | -``` |
| 34 | +Example overrides: |
135 | 35 |
|
136 | | -### Verify storage class |
137 | 36 | ```bash |
138 | | -kubectl get storageclass |
139 | | -kubectl describe storageclass local-path |
| 37 | +helm upgrade --install fennel-node fennel/fennel-node \ |
| 38 | + -n fennel \ |
| 39 | + --set node.chainData.storageClass=managed-csi \ |
| 40 | + --set node.chainData.volumeSize=256Gi |
140 | 41 | ``` |
141 | 42 |
|
142 | 43 | ## License |
143 | 44 |
|
144 | | -This chart is licensed under the Apache License 2.0. |
| 45 | +Apache-2.0 |
0 commit comments