Skip to main content
Version: Early Access

Install or Upgrade Deploy on an Air-gapped Environment

You can install Deploy in an air-gapped environment that is disconnected from the public internet. This guide provides information for installing and upgrading Deploy in such environments using a Minikube cluster and a custom image registry. While these steps are tailored for Minikube, they can be adapted to other Kubernetes platforms, provided the custom image registry contains all the necessary images.

note

The Amazon Elastic Container Registry (ECR) does not support having all necessary images in a single repository and therefore, cannot be used as a custom image registry.

Prerequisites

Installing Deploy in an Air-gapped Cluster Environment

Here's a detailed step-by-step.

Step 1: Download the appropriate blueprint version

  1. Run the following command:
xl kube help

This command returns the following message:

Install, upgrade or clean Digital.ai Deploy or Digital.ai Release on a Kubernetes cluster using operator technology.

Installation blueprint files are used from https://dist.xebialabs.com/public/blueprints/26.1.0/.

You need to have kubectl installed and configured for the target Kubernetes cluster.

The xl kube command will search for blueprints from this location.

note

The 26.1.x in the URL refers to the appropriate version of xl-op-blueprints. Use the specific version required for your installation.

  1. Download all the files from that location and place them in the server directory where you will execute the xl kube command.
tip

Download the zipped version of the xl-op-blueprints from this location.

  1. Unzip the downloaded files on the server where you will execute the xl kube command.

When you run a Kubernetes cluster in an air-gapped environment, it's not possible to download images from public registries such as docker.io, gcr.io, or quay.io. Therefore, you need to set up an image registry also called as custom image registry. This should be either public (not password protected) or private (password protected), that is accessible to the Kubernetes cluster. This can be done by creating a private image repository on your cloud provider or a local image registry.

  1. Get the required images.

Based on your installation plan, push the images to your image repository.

For the list of prerequisite images check Setup Custom Image Registry

  1. Push the images to an internally accessible Docker registry.

To ensure that the required images are available in an air-gapped Kubernetes cluster, you must pull them first on a Bastion instance with public internet connectivity, tag them, and push them to the previously created Docker image registry that's internally accessible. Once this is done, your Kubernetes cluster can pull the required images from the Docker registry.

For example:

In the Docker registry (myrepo_host), run the following command to push the Docker image (xl-deploy) to the repository (myrepo)

note

Replace <version> with the version of Deploy you are trying to install.

docker pull docker.io/xebialabs/xl-deploy:<version>
docker tag docker.io/xebialabs/xl-deploy:<version> myrepo_host/myrepo/xl-deploy:<version>
docker push myrepo_host/myrepo/xl-deploy:<version>
note

Ensure that you are logged in to the Docker registry before pushing the images.

  1. Create a secret for private image registry with password protection.
note

It's required only when you use a private image registry.

Run the following command:

kubectl create secret docker-registry regcred \
--docker-server=myrepo_host \
--docker-username=<reg-user> \
--docker-password=<reg-password> \
-n digitalai

This example creates a secret called regcred which can be used as pull secrets required for pulling images from a private image registry.

Step 3: Use xl kube install to install using custom Docker image registry

note

For instructions on installing Deploy using the default image registry, see Install—Deploy—On-premise Kubernetes.

Here is an example of the installation on Minikube with a local Docker registry running at localhost:5000:

  • ? Enter the custom docker image registry name: localhost:5000
  • ? Enter the repository name for the Deploy application and operator images (eg: <repositoryName> from <repositoryName>/<imageName>:<tagName>): myrepo
  • ? Enter the Deploy server image name (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): xl-deploy
  • ? Enter the operator image to use (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): deploy-operator
note

For the above mentioned prompts, override the default answers and specify answers in this format.

For more information about these prompts, see Installation Options Reference for Digital.ai Deploy.

❯ xl kube install -r c:\proj\xl-op-blueprints
? Following kubectl context will be used during execution: `minikube`? Yes
? Select the Kubernetes setup where the Digital.ai Devops Platform will be installed, updated or cleaned: PlainK8s [Plain multi-node K8s cluster]
? Do you want to use an custom Kubernetes namespace (current default is 'digitalai'): No
? Do you want to create custom Kubernetes namespace digitalai, it does not exist: No
? Product server you want to perform install for: dai-deploy [Digital.ai Deploy]
? Select type of image registry: public [Custom Public Registry (Uses a specific custom registry)]
? Enter the custom docker image registry name: localhost:5000
? Enter the repository name for the Deploy application and operator images (eg: <repositoryName> from <repositoryName>/<imageName>:<tagName>): myrepo
? Enter the Deploy server image name (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): xl-deploy
? Enter the Deploy application image tag (eg: <tagName> from <repositoryName>/<imageName>:<tagName>): 26.1.0
? Enter the Deploy task engine image name for version 22 and above (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): deploy-task-engine
? Enter the Central Configuration image name for version 22 and above (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): central-configuration
? Enter the Deploy master replica count: 1
? Enter PVC size for Deploy master (Gi): 1
? Select between supported Access Modes for the Deploy application pods: ReadWriteOnce [ReadWriteOnce]
? Enter the Deploy worker replica count: 1
? Enter PVC size for Deploy worker (Gi): 1
? Enter PVC size for Central Configuration (Gi): 0.500000
? Select between supported ingress types: nginx [NGINX Ingress Bitnami Helm Chart (deprecated)]
? Do you want to enable an TLS/SSL configuration (if yes, requires existing TLS secret in the namespace): No
? Provide DNS name for accessing UI of the server: test.com
? Provide administrator password: 30Q5utfMV6O9wnHF
? Type of the OIDC configuration: no-oidc [No OIDC Configuration]
? Enter the operator image to use (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): deploy-operator
? Select source of the license: file [Path to the license file (the file can be in clean text or base64 encoded)]
? Provide license file for the server: c:\downloads\xld-license.lic
? Select source of the repository keystore: generate [Generate the repository keystore during installation (you need to have keytool utility installed in your path)]
? Provide repository keystore passphrase: 1uwAFCtUJEdwmaDi
? Provide storage class for the server: standard
? Do you want to install a new Postgresql on the cluster: operator [CloudNativePG Operator (experimental/non-production)]
? Provide Storage Class to be defined for PostgreSQL: standard
? Provide PVC size for PostgreSQL (Gi): 1
? Do you want to install a new RabbitMQ on the cluster: operator [RabbitMQ Cluster Operator (experimental/non-production)]
? Replica count to be defined for RabbitMQ: 1
? Storage Class to be defined for RabbitMQ: standard
? Provide PVC size for RabbitMQ (Gi): 1

...

? Do you want to proceed to the deployment with these values? Yes
For current process files will be generated in the: digitalai/dai-deploy/digitalai/20260401-112103/kubernetes
Generated answers file successfully: digitalai/generated_answers_dai-deploy_digitalai_install-20260401-112103.yaml
Starting install processing.
...

After the installation is completed successfully, you will see the operator and other resource pods up and running.

##Use xl kube upgrade to upgrade Deploy using a custom Docker image registry

The upgrade process for a custom Docker image registry is similar to the installation process except using xl kube upgrade instead of xl kube install.

Following is an example of running upgrade using the custom docker image registry option:

❯ xl kube upgrade -l ./xl-op-blueprints
...
? Select type of image registry: public [Custom Public Registry (Uses a specific custom registry)]
? Enter the custom docker image registry name: localhost:5000
? Enter the repository name for the Deploy application and operator images (eg: <repositoryName> from <repositoryName>/<imageName>:<tagName>): myrepo
...
? Enter the operator image to use (eg: <imageName> from <repositoryName>/<imageName>:<tagName>): deploy-operator
...
? Edit list of custom resource keys that will migrate to the new Deploy CR:
...
? Do you want to proceed to the deployment with these values? Yes
For current process files will be generated in the: digitalai/dai-deploy/digitalai/20260401-112103/kubernetes
Generated answers file successfully: digitalai/generated_answers_dai-deploy_digitalai_upgrade-20260401-112103.yaml
Starting upgrade processing.
...