Air-Gap Build & Deploy
Purpose: For operators, shows how to resolve air-gap build failures, verification failures, and bastion deployment issues.
Prerequisites
opencenter-airgapCLI installed- Docker daemon running (for build operations)
- Sufficient disk space (builds can exceed 20 GB)
Build Failures
Image Pull Failure
Symptom: opencenter-airgap build fails with failed to pull image.
The build host cannot reach the container registry, or the image tag does not exist.
- Verify the image exists:
docker pull <image>:<tag>
- If the registry requires authentication:
docker login <registry>
- Check
config/versions.envfor typos in image references.
Disk Space Exhaustion
Symptom: Build fails with no space left on device.
Air-gap packages bundle all container images, charts, and binaries. Check available space:
df -h /var/lib/docker
df -h ./build
Free space by cleaning previous builds:
opencenter-airgap clean
docker system prune -f
Helm Chart Download Failure
Symptom: failed to fetch chart during build.
Verify the chart exists in the repository at the specified version:
helm repo add <repo-name> <repo-url>
helm search repo <chart-name> --versions
Update config/versions.env or config/components.yaml with a valid version.
Verification Failures
Digest Mismatch
Symptom: opencenter-airgap verify reports digest mismatch for image.
The package was modified after build, or the manifest was regenerated without rebuilding.
Rebuild the package:
opencenter-airgap clean
opencenter-airgap build
opencenter-airgap verify
Missing Components
Symptom: verify reports components present in the manifest but missing from the package.
Components were added to config/components.yaml after the last build. Rebuild to include them.
Bastion Deployment Issues
Zarf Deploy Fails
Symptom: zarf package deploy fails on the bastion host.
- Verify the package file is intact (transfer corruption):
zstd -t zarf-package-*.tar.zst
-
Check that the bastion has sufficient disk space and Docker is running.
-
If ports 5000 or 8080 are in use, stop conflicting services before deploying.
Registry Not Accessible from Nodes
Symptom: Cluster nodes cannot pull images from the bastion registry.
- Verify the bastion registry is running:
curl -s http://<bastion-ip>:5000/v2/_catalog
-
Check that cluster nodes can reach the bastion on port 5000. Firewall rules or network segmentation may block access.
-
Verify ContainerD on each node is configured to use the bastion as a mirror. The Kubespray inventory should include the registry mirror configuration.
Package Server Not Serving
Symptom: opencenter-airgap serve starts but nodes cannot fetch packages.
Check the Nginx container:
docker ps | grep nginx
docker logs <nginx-container-id>
Verify port 8080 is accessible from the cluster network.