Air-gapped installation
Install Octostar in a cluster with no route to the internet. It is the same
bin/install.sh as an online install, with offline: true in local-env.yaml.
What you need
- A private container registry that all nodes can reach. It must hold every image of the release.
- A Helm chart repository inside your network. It must hold every chart of the
release. It must be a classic HTTP repository (made with
helm repo index), not an OCI registry, and it must be flat. - An admission mutator in the cluster that rewrites the registry host of each
image to your registry. For example, OPA Gatekeeper with an
AssignImagemutation. Octostar does not install one. - On the install host:
kubectl,helm,helmfileandyq. The release files carry them (v2.0.9 and later), and the installer uses those. For an older release, install them yourself. - The
octostar-singlenodefiles of the release, and a kube context for the cluster.
📝 Ask your Octostar contact how you get the image list and the charts for your release.
versions.yamlgives the version of each one.
Steps
1. Mirror the images and the charts
Copy every image into your registry, and every chart into your chart repository.
Keep the image paths. For example, docker.io/octostar/photon-data becomes
<registry>/octostar/photon-data.
2. Set up the registry rewrite
Install the mutator. Pull one pod from your registry to test it.
3. Write local-env.yaml
cp local-env.template.yaml local-env.yaml
Set at least these values:
offline: true
chartRepoBase: "http://charts.example.internal:8879"
postgresql:
imageName: "<registry>/cloudnative-pg/postgresql:16.4"
operatorImageRepository: "<registry>/cloudnative-pg/cloudnative-pg"
operatorImageTag: "1.24.1"
operatorImagePullPolicy: Always
- Write
offlineas a baretrue.yesandonare refused. - Use the PostgreSQL image and operator tags of your release. The example tags are not a promise.
- You do not need a Docker Hub token.
- The install sets
bigData: "none". You cannot change it offline. - Set
ingress.controllerImageDigestonly if your mirror kept the upstream digest. - A Grafana plugin that you add with
grafana.pluginsmust be written as<zip URL>;<plugin id>, on a server that the cluster can reach.
See Configuration for the domain and the certificate. The map tiles and the geocoding index are large. Leave them off unless you need them. See Storage and S3.
4. Install
./bin/install.sh --context <context-name>
The installer creates its namespaces. If you made them first, it keeps them. Use
--dry-run to preview.
5. Verify
The install uses the release's own kubectl. To run it from your shell, put the
release's tools on your PATH first, from the directory the release is in (see
Prerequisites):
export PATH="$PWD/bin/tools/$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/'):$PATH"
kubectl get pods -n octostar-main
Open https://home.<domain> when the pods are ready.
If it fails
ImagePullBackOff: the mutator did not rewrite the image, or the registry does not hold it. Read the image name inkubectl describe pod <pod>.- A chart error in the first minutes:
chartRepoBaseis wrong, or the repository lacks the chart. - A PostgreSQL pod that restarts in a loop: the pinned PostgreSQL image differs
from the image that the mutator admitted. Fix the
postgresql.*values.
Upgrade and restore
- Upgrade: mirror the new release, then run
update-existing.sh. See Upgrading. - Restore: use
restore-install.sh --offline. See Backup & restore.