@@ -109,18 +109,27 @@ obol stack up
109109obol 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
113116obol 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)
117123obol k9s
118124```
119125
120126The 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
160169Each network installation creates a ** unique deployment instance** with:
1611701 . 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
1631723 . 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
167193You 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
171197obol 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
175204obol 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
179211obol 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