Zarf is an open source tool for packaging and deploying software into air-gapped Kubernetes environments. It bundles everything your application needs — Helm charts, container images, manifests — into a single portable artifact that can be deployed without internet access.
In this tutorial, you'll build a Zarf package for ArgoCD from scratch, deploy it to a local Kubernetes cluster, and access the ArgoCD dashboard.
- How a
zarf.yamlpackage definition is structured - How to use
zarf dev find-imagesto discover required container images - How to build a Zarf package tarball
- How to deploy a Zarf package to a Kubernetes cluster
- How to inspect and remove a deployed package
- Zarf installed and on your
PATH - A Kubernetes cluster
Any local cluster will work. Some common choices:
| Option | Notes |
|---|---|
| k3d | K3s in Docker — closest to the Instruqt lab environment |
| kind | Well-documented, widely used in OSS tutorials |
| Docker Desktop | Enable Kubernetes in settings |
| Existing cluster | Works as long as kubectl is configured |
Whichever you choose, verify your cluster is reachable before starting:
zarf tools kubectl cluster-infoThen initialize your cluster for with the required Zarf infrastructure:
zarf initSelect y to confirm deploying the package and y for the git-server component.
| Part | Description |
|---|---|
| Part 1: Create a Zarf Package | Author a zarf.yaml, discover images, and build the package tarball |
| Part 2: Deploy a Zarf Package | Deploy the package to your cluster and access ArgoCD |
| Part 3: Inspect a Zarf Package | Inspect package contents, deployed state, and remove a package |
Work through the parts in order — each part builds on the state from the previous one.
After completing the tutorial, there's a lot more to explore with Zarf:
- Browse the Zarf examples for more complex package configurations (multi-component packages, OCI publishing, custom variables, etc.)
- Read the Zarf documentation for the full feature set
- Try packaging your own application — start with a skeleton
zarf.yamland iterate from there