Skip to content

Commit 4eb5350

Browse files
updated readme
1 parent 533b3d2 commit 4eb5350

File tree

1 file changed

+167
-21
lines changed

1 file changed

+167
-21
lines changed

README.md

Lines changed: 167 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,27 @@ obol stack up
109109
obol network install ethereum
110110
# This creates a deployment like: ethereum-nervous-otter
111111

112+
# Deploy the network to the cluster
113+
obol network sync ethereum/nervous-otter
114+
112115
# Install another network configuration
113116
obol network install ethereum --network=holesky
114117
# This creates a separate deployment like: ethereum-happy-panda
115118

119+
# Deploy the second network
120+
obol network sync ethereum/happy-panda
121+
116122
# View cluster resources (opens interactive terminal UI)
117123
obol k9s
118124
```
119125

120126
The stack will create a local Kubernetes cluster. Each network installation creates a uniquely-namespaced deployment instance, allowing you to run multiple configurations simultaneously.
121127

122128
> [!TIP]
123-
> Use `obol network list` to see all available networks. Customize installations with flags (e.g., `obol network install ethereum --network=holesky --execution-client=geth`) to create different deployment configurations.
129+
> Use `obol network list` to see all available networks. Customize installations with flags (e.g., `obol network install ethereum --network=holesky --execution-client=geth`) to create different deployment configurations. After installation, deploy to the cluster with `obol network sync <network>/<id>`.
130+
131+
> [!TIP]
132+
> You can also install arbitrary Helm charts as applications using `obol app install <chart-url>`. Find charts at [Artifact Hub](https://artifacthub.io).
124133
125134
## Managing Networks
126135

@@ -159,25 +168,51 @@ obol network install ethereum
159168

160169
Each network installation creates a **unique deployment instance** with:
161170
1. Network configuration templated and saved to `~/.config/obol/networks/ethereum/<namespace>/`
162-
2. Resources deployed to a unique Kubernetes namespace (e.g., `ethereum-nervous-otter`)
171+
2. Configuration files ready to be deployed to the cluster
163172
3. Isolated persistent storage for blockchain data
164173

174+
### Sync a Network
175+
176+
After installing a network configuration, deploy it to the cluster:
177+
178+
```bash
179+
# Deploy the network to the cluster
180+
obol network sync ethereum/<namespace>
181+
182+
# Or use the namespace format
183+
obol network sync ethereum-nervous-otter
184+
```
185+
186+
The sync command:
187+
- Reads the configuration from `~/.config/obol/networks/<network>/<namespace>/`
188+
- Executes helmfile to deploy resources to a unique Kubernetes namespace
189+
- Creates isolated persistent storage for blockchain data
190+
165191
**Multiple deployments:**
166192

167193
You can install the same network type multiple times with different configurations. Each deployment is isolated in its own namespace:
168194

169195
```bash
170196
# Install mainnet with Geth + Prysm
171197
obol network install ethereum --network=mainnet --execution-client=geth --consensus-client=prysm
172-
# Creates: ethereum-nervous-otter namespace
198+
# Creates configuration: ethereum-nervous-otter
199+
200+
# Deploy to cluster
201+
obol network sync ethereum/nervous-otter
173202

174203
# Install Holesky testnet with Reth + Lighthouse
175204
obol network install ethereum --network=holesky --execution-client=reth --consensus-client=lighthouse
176-
# Creates: ethereum-laughing-elephant namespace
205+
# Creates configuration: ethereum-laughing-elephant
206+
207+
# Deploy Holesky to cluster
208+
obol network sync ethereum/laughing-elephant
177209

178210
# Install another Holesky instance for testing
179211
obol network install ethereum --network=holesky
180-
# Creates: ethereum-happy-panda namespace
212+
# Creates configuration: ethereum-happy-panda
213+
214+
# Deploy second Holesky instance
215+
obol network sync ethereum/happy-panda
181216
```
182217

183218
**Ethereum configuration options:**
@@ -203,10 +238,11 @@ Each network installation creates an isolated deployment with a unique namespace
203238
- **Persistent volumes**: Blockchain data stored in `~/.local/share/obol/<cluster-id>/networks/<network>_<namespace>/`
204239
- **Service endpoints**: Internal cluster DNS per deployment (e.g., `ethereum-rpc.ethereum-nervous-otter.svc.cluster.local`)
205240

206-
**Two-stage templating:**
207-
1. CLI flags template the helmfile values section with your configuration
208-
2. Helmfile processes the template and deploys to the cluster
209-
3. Configuration is saved locally for future updates and management
241+
**Install and Sync workflow:**
242+
1. **Install**: `obol network install` generates configuration files locally from CLI flags
243+
2. **Customize**: Edit values and templates in `~/.config/obol/networks/<network>/<id>/` (optional)
244+
3. **Sync**: `obol network sync` deploys the configuration to the cluster using helmfile
245+
4. **Update**: Modify configuration and re-sync to update the deployment
210246

211247
### Delete a Network Deployment
212248

@@ -234,6 +270,103 @@ This command will:
234270
> [!NOTE]
235271
> You can have multiple deployments of the same network type. Deleting one deployment (e.g., `ethereum-nervous-otter`) does not affect other deployments (e.g., `ethereum-happy-panda`).
236272
273+
## Managing Applications
274+
275+
The Obol Stack supports installing arbitrary Helm charts as managed applications. Each application installation creates an isolated deployment with its own namespace, similar to network deployments.
276+
277+
### Install an Application
278+
279+
Install any Helm chart by providing a direct HTTPS URL to a chart `.tgz` file:
280+
281+
```bash
282+
# Install Redis from Bitnami
283+
obol app install https://charts.bitnami.com/bitnami/redis-19.0.0.tgz
284+
285+
# Install PostgreSQL with custom name and ID
286+
obol app install https://charts.bitnami.com/bitnami/postgresql-15.0.0.tgz --name mydb --id production
287+
```
288+
289+
Find chart URLs at [Artifact Hub](https://artifacthub.io).
290+
291+
**What happens during installation:**
292+
1. Downloads the chart files locally to `~/.config/obol/applications/<app>/<id>/`
293+
2. Extracts chart templates, values, and metadata
294+
3. Generates a helmfile.yaml for deployment
295+
4. Saves installation metadata
296+
297+
**Installation options:**
298+
- `--name`: Application name (defaults to chart name)
299+
- `--version`: Chart version (defaults to latest)
300+
- `--id`: Deployment ID (defaults to generated petname)
301+
- `--force` or `-f`: Overwrite existing deployment
302+
303+
### Sync an Application
304+
305+
After installing an application, deploy it to the cluster:
306+
307+
```bash
308+
# Deploy the application
309+
obol app sync postgresql/eager-fox
310+
311+
# Check status
312+
obol kubectl get all -n postgresql-eager-fox
313+
```
314+
315+
The sync command:
316+
- Reads configuration from `~/.config/obol/applications/<app>/<id>/`
317+
- Executes helmfile to deploy resources
318+
- Creates unique namespace: `<app>-<id>`
319+
320+
### List Applications
321+
322+
View all installed applications:
323+
324+
```bash
325+
# Simple list
326+
obol app list
327+
328+
# Detailed information
329+
obol app list --verbose
330+
```
331+
332+
### Delete an Application
333+
334+
Remove an application deployment and its cluster resources:
335+
336+
```bash
337+
# Delete with confirmation prompt
338+
obol app delete postgresql/eager-fox
339+
340+
# Skip confirmation
341+
obol app delete postgresql/eager-fox --force
342+
```
343+
344+
This command will:
345+
- Remove the Kubernetes namespace and all deployed resources
346+
- Delete the configuration directory and chart files
347+
348+
### Customize Applications
349+
350+
After installation, you can modify the chart files directly:
351+
352+
```bash
353+
# Edit application values
354+
$EDITOR ~/.config/obol/applications/postgresql/eager-fox/values.yaml
355+
356+
# Modify templates
357+
$EDITOR ~/.config/obol/applications/postgresql/eager-fox/templates/statefulset.yaml
358+
359+
# Re-deploy with changes
360+
obol app sync postgresql/eager-fox
361+
```
362+
363+
**Local files:**
364+
- `Chart.yaml`: Chart metadata
365+
- `values.yaml`: Configuration values (edit to customize)
366+
- `templates/`: Kubernetes resource templates
367+
- `helmfile.yaml`: Deployment definition
368+
- `metadata.yaml`: Installation metadata
369+
237370
### Managing the Stack
238371

239372
**Start the stack:**
@@ -354,12 +487,22 @@ The Obol Stack follows the [XDG Base Directory](https://specifications.freedeskt
354487
│ ├── helmfile.yaml # Base stack configuration
355488
│ ├── base/ # Base Kubernetes resources
356489
│ └── values/ # Configuration templates (ERPC, frontend)
357-
└── networks/ # Installed network deployments
358-
├── ethereum/ # Ethereum network deployments
359-
│ ├── <namespace-1>/ # First deployment instance
360-
│ └── <namespace-2>/ # Second deployment instance
361-
├── helios/ # Helios network deployments
362-
└── aztec/ # Aztec network deployments
490+
├── networks/ # Installed network deployments
491+
│ ├── ethereum/ # Ethereum network deployments
492+
│ │ ├── <namespace-1>/ # First deployment instance
493+
│ │ └── <namespace-2>/ # Second deployment instance
494+
│ ├── helios/ # Helios network deployments
495+
│ └── aztec/ # Aztec network deployments
496+
└── applications/ # Installed application deployments
497+
├── redis/ # Redis deployments
498+
│ └── <id>/ # Deployment instance
499+
│ ├── Chart.yaml # Chart metadata
500+
│ ├── values.yaml # Configuration values
501+
│ ├── helmfile.yaml # Deployment definition
502+
│ ├── metadata.yaml # Installation metadata
503+
│ └── templates/ # Kubernetes resources
504+
└── postgresql/ # PostgreSQL deployments
505+
└── <id>/ # Deployment instance
363506
```
364507
365508
**Data directory structure:**
@@ -453,12 +596,15 @@ If you're contributing to the Obol Stack or want to run it from source, you can
453596
│ │ ├── helmfile.yaml
454597
│ │ ├── base/
455598
│ │ └── values/
456-
│ └── networks/ # Installed network deployments
457-
│ ├── ethereum/ # Ethereum network deployments
458-
│ │ ├── <namespace-1>/ # First deployment instance
459-
│ │ └── <namespace-2>/ # Second deployment instance
460-
│ ├── helios/
461-
│ └── aztec/
599+
│ ├── networks/ # Installed network deployments
600+
│ │ ├── ethereum/ # Ethereum network deployments
601+
│ │ │ ├── <namespace-1>/ # First deployment instance
602+
│ │ │ └── <namespace-2>/ # Second deployment instance
603+
│ │ ├── helios/
604+
│ │ └── aztec/
605+
│ └── applications/ # Installed application deployments
606+
│ ├── redis/
607+
│ └── postgresql/
462608
└── data/ # Persistent volumes (network data)
463609
```
464610

0 commit comments

Comments
 (0)