Devtron Enterprise (Air‐gapped) - devtron-labs/utilities GitHub Wiki

This documentation is for installing Devtron in air-gapped clusters. If your cluster is NOT air-gapped, consider Installing Devtron referring this documentation as air-gapped installations have certain limitations.

Pre-requisites

  1. Download clone-images.sh and devtron-images.txt.source on the VM which has public internet access as well as access to your private registry. You can use the following commands:
wget https://gist.githubusercontent.com/akshatsinha007/67b87fbaa3fc41f2400afcc990a22fff/raw/b34314987996f1687ec1af26483720b0397cc617/clone-images.sh
wget https://raw.githubusercontent.com/devtron-labs/charts/refs/heads/main/charts/devtron-enterprise/devtron-images.txt.source

You can also push all the images mentioned in devtron-images.txt.source manually to your private registry if you wish to and skip to step 6.

  1. Install docker on the VM from where you're executing this script.
  2. Set the value of TARGET_REGISTRY, TARGET_REGISTRY_USERNAME, TARGET_REGISTRY_TOKEN as well.
  3. Platform Selection:
  • For Linux/amd64
export PLATFORM="linux/amd64"
  • For Linux/arm64
export PLATFORM="linux/arm64"
  1. Make the script executable and run it:
chmod +x clone-images.sh
bash clone-images.sh

Wait for all the images to be pushed to your target registry.

Devtron Installation

Once all Devtron images are successfully pushed to your Container Registry, verify it once and then use the following helm commands to install Devtron.

Before starting, ensure you have created an image pull secret for your registry if authentication is required.

  1. Create the namespace (create the devtron-cd and the devtron-ci namespace only if installing Devtron with CI/CD)

    kubectl create ns devtroncd
    kubectl create ns devtron-cd
    kubectl create ns devtron-ci
    
  2. Create the Docker registry secret in devtroncd namespace

    kubectl create secret docker-registry devtron-imagepull \
      --namespace devtroncd \
      --docker-server=$TARGET_REGISTRY \
      --docker-username=$TARGET_REGISTRY_USERNAME \
      --docker-password=$TARGET_REGISTRY_TOKEN
    

    If you are installing Devtron with the CI/CD module or using Argo CD, create the secret in the following namespaces else, you can skip these step-:

    kubectl create secret docker-registry devtron-imagepull \
      --namespace devtron-cd \
      --docker-server=$TARGET_REGISTRY \
      --docker-username=$TARGET_REGISTRY_USERNAME \
      --docker-password=$TARGET_REGISTRY_TOKEN
    kubectl create secret docker-registry devtron-imagepull \
      --namespace devtron-ci \
      --docker-server=$TARGET_REGISTRY \
      --docker-username=$TARGET_REGISTRY_USERNAME \
      --docker-password=$TARGET_REGISTRY_TOKEN
    

Get the latest Devtron Helm Chart

helm pull devtron-enterprise --repo http://helm.devtron.ai

This would download the tar file of the devtron-enterprise chart, Make sure to replace the <devtron-chart-file> in the installation commands with this file name.

Install Devtron without any Integration (Devtron Dashboard)

Use the below command to install Devtron without any Integrations

  1. Without imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set global.containerRegistry="$TARGET_REGISTRY" --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true --set devtron.installer.modules={} --set devtron.monitoring.grafana.enabled=false --set devtron.notifier.enabled=false  --set devtron.security.enabled=false --set devtron.security.trivy.enabled=false 
    
  2. With imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set global.containerRegistry="$TARGET_REGISTRY" --set devtron.global.imagePullSecrets[0].name=devtron-imagepull --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true --set devtron.installer.modules={} --set devtron.monitoring.grafana.enabled=false --set devtron.notifier.enabled=false  --set devtron.security.enabled=false --set devtron.security.trivy.enabled=false 
    

Installing Devtron with CI/CD Mode

Use the below command to install Devtron with only the CI/CD module

  1. Without imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set global.containerRegistry="$TARGET_REGISTRY" --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true --set devtron.monitoring.grafana.enabled=false --set devtron.notifier.enabled=false  --set devtron.security.enabled=false --set devtron.security.trivy.enabled=false 
    
  2. With imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set global.containerRegistry="$TARGET_REGISTRY" --set global.imagePullSecrets[0].name=devtron-imagepull --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true --set devtron.monitoring.grafana.enabled=false --set devtron.notifier.enabled=false  --set devtron.security.enabled=false --set devtron.security.trivy.enabled=false
    

Install Devtron with CICD Mode including Argocd

Use the below command to install Devtron with the CI/CD module and Argo CD

  1. Without imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set devtron.argo-cd.enabled=true --set global.containerRegistry="$TARGET_REGISTRY" --set devtron.argo-cd.global.image.repository="${TARGET_REGISTRY}/argocd" --set devtron.argo-cd.redis.image.repository="${TARGET_REGISTRY}/redis" --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true
    
  2. With imagePullSecrets:

    helm install devtron <devtron-chart-file> -n devtroncd --set devtron.argo-cd.enabled=true --set global.containerRegistry="$TARGET_REGISTRY" --set devtron.argo-cd.global.image.repository="${TARGET_REGISTRY}/argocd" --set devtron.argo-cd.redis.image.repository="${TARGET_REGISTRY}/redis" --set global.imagePullSecrets[0].name=devtron-imagepull --set-string devtron.components.devtron.customOverrides.IS_AIR_GAP_ENVIRONMENT=true
    

Next Steps

After installation, refer Devtron installation documentation for further steps, including obtaining the dashboard URL and the admin password.