Air-Gapped Install

For environments that are connected to the Internet, one needs access to two repositories to install K10:

  • The Helm repository that contains the K10 chart

  • The container registry that contains the K10 container images

However, if an air-gapped installation is required, it is possible to use your own private container registry to install K10. While this can always be done manually, we have created the k10offline tool to make it easier to automate the process.

Obtaining Older K10 Versions

The below commands will operate against the latest version of K10 (2.0.3). If you want an older version, you can execute the following to discover older available version number (listed under the CHART VERSION column) and the replace the version listed in all the below commands.

helm repo update
helm search --versions kasten/k10

Preparing K10 Container Images for Air-Gapped Use

List K10 Container Images

If you want to see the list of images used by the current K10 version, you can run the following command. This can be helpful if you prefer to tag and push K10 images into your private repository manually instead of using the Kasten provided tool.

docker run --rm -it gcr.io/kasten-images/k10offline:2.0.3 list-images

Local Pull of all K10 Container Images

The following command will execute the k10offline tool and use docker-in-docker (via docker.sock) to download all K10 images into your local repository.

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock \
    gcr.io/kasten-images/k10offline:2.0.3 pull images

Move K10 Images Into a Private Repository

Finally, to completely automate the download and re-upload of K10 container images, the following command will pull all K10 images into your local repository, re-tag them for repo.example.com repository and push them to this specified repository. Note that this tool will use your local docker config if the private repository requires authentication.

Note

K10 uses a few upstream container images. To avoid a possible collision with a customer's private version, the k10offline tool adds the k10- prefix to these container images tags.

docker run --rm -ti -v /var/run/docker.sock:/var/run/docker.sock \
    -v ${HOME}/.docker:/root/.docker \
    gcr.io/kasten-images/k10offline:2.0.3 pull images --newrepo repo.example.com

Note

Running this command will also print a helpful set of Helm settings for installing K10 via repo.example.com images.

Air-Gapped K10 Installation

Fetching the Helm Chart for Local Use

To fetch the most recent K10 Helm chart for local use, run the following command to pull the latest K10 chart as a compressed tarball (.tgz) file into the working directory.

helm repo update
helm fetch kasten/k10

If you need to fetch a specific version, please run the following command:

helm repo update
helm fetch --version <k10-version> kasten/k10

Getting Helm Configuration for a Private Repository

If you have uploaded all the required K10 container images to repo.example.com, the following command will generate you a helm settings to deploy K10.

docker run --rm -it gcr.io/kasten-images/k10offline:2.0.3 chart-settings \
    --newrepo repo.example.com

Please use the following --set options for the K10 helm chart:
--set image.repository=repo.example.com \
--set kanisterToolsImage.image=repo.example.com/kanister-tools:<version> \
--set ambassadorImage.image=repo.example.com/ambassador:<version> \
--set prometheus.configmapReload.image.repository=repo.example.com/configmap-reload \
--set prometheus.configmapReload.image.tag=k10-<version> \
--set prometheus.server.image.repository=repo.example.com/prometheus \
--set prometheus.server.image.tag=k10-<version>

Installing K10 with Local Helm Chart and Container Images

Finally, you can install K10 with provided settings from the above step:

helm install k10-2.0.3.tgz --name k10 --namespace kasten-io \
    --set image.repository=repo.example.com \
    --set kanisterToolsImage.image=repo.example.com/kanister-tools:k10-<version> \
    --set ambassadorImage.image=repo.example.com/ambassador:k10-<version> \
    --set prometheus.configmapReload.image.repository=repo.example.com/configmap-reload \
    --set prometheus.configmapReload.image.tag=k10-<version> \
    --set prometheus.server.image.repository=repo.example.com/prometheus \
    --set prometheus.server.image.tag=k10-<version>