Capsailer
Capsailer gets container images and Helm charts into Kubernetes clusters that have no internet access.
The problem
An air-gapped cluster cannot pull nginx:1.25 from Docker Hub, and the Helm charts you install still point at those public images. You have to download everything on a connected machine, carry it across, put it in a registry the cluster can reach, and change every image name to match. Doing that by hand is slow and easy to get wrong.
How Capsailer helps
connected machine air-gapped side
┌──────────────────────┐ copy file ┌─────────────────────────────────────┐
│ manifest.yaml │ ───────────► │ capsailer push │
│ capsailer build │ bundle.tar.gz │ images ──► your registry │
│ images + charts │ │ charts ──► ChartMuseum (optional) │
│ names rewritten │ │ helm install │
└──────────────────────┘ └─────────────────────────────────────┘
- Build: list images and charts in a manifest.
capsailer builddownloads them into one bundle file and can rewrite the image names inside the charts to point to your registry. - Push:
capsailer pushuploads the images to a registry. Use one you already have (Harbor, Artifactory,registry:2), or letcapsailer registrydeploy one in your cluster. - Install: run
helm install. The charts already ask for the names that now exist in your registry.
Why use it
- One binary. Building bundles and pushing images need no Docker, skopeo or other tools.
- Names that match.
buildandpushfollow one naming rule, so the names in the charts are the names in the registry. - Works with the registry you have. Push to any registry with
--external-registry, including with a path prefix likeharbor.example.com:5000/nai. - Handles vendor tarballs. A
docker savefile with many images and short names likenutanix/nai-api:v2.8.1can be pushed as it is. - Safe to preview.
--dry-runprints everysource -> destinationbefore anything is uploaded.
Where to go next
- New here? Follow Getting Started. It takes five minutes and needs no cluster.
- Have a vendor tarball? See Pushing a vendor archive.
- Something failed? See Troubleshooting.
- Want to know what it does not do? See Limitations.
- Looking for an option? See the command reference.