Skip to main content

Azure Setup Guide

This guide walks you through setting up Orchestr8 on Microsoft Azure using Azure Kubernetes Service (AKS).

Prerequisites​

CLI Tool Requirements​

Before deploying to Azure, ensure you have the required command-line tools. See the Prerequisites Guide for complete installation instructions for all tools.

Required for Azure:

  • Core tools: kubectl, helm, git (required for all providers)
  • Azure-specific: az CLI for authentication and management
  • Optional: terraform (required for infrastructure provisioning)

Quick Verification:

# Verify all required tools are installed
o8 doctor --verbose

# Show installation instructions for missing tools
o8 doctor --fix

Azure Requirements​

  • Active Azure subscription
  • Sufficient quota for:
    • AKS cluster (minimum 2 system nodes + 3 user nodes)
    • Virtual Network and subnets
    • Azure Key Vault
    • Azure Container Registry (optional)
    • Public IP addresses (for load balancers)

Quick Start​

1. Run the Setup Script​

For Windows PowerShell:

.\scripts\setup-azure-auth.ps1

This script will:

  • Check Azure CLI installation
  • Authenticate with Azure
  • Create a resource group
  • Create an Azure Key Vault
  • Set up environment variables
  • Optionally create a service principal

2. Bootstrap AKS Cluster​

Create an AKS cluster with O8:

o8 bootstrap create azure \
--cluster-name orchestr8-cluster \
--resource-group orchestr8-resources \
--location eastus2

This command will:

  • Create a Virtual Network with proper subnets
  • Deploy an AKS cluster with system and user node pools
  • Enable Azure AD RBAC
  • Enable Workload Identity for secure pod authentication
  • Create an Azure Container Registry
  • Set up Azure Key Vault for secrets management

3. Install O8 Platform​

Once the cluster is ready, install the O8 platform:

o8 setup --provider azure --domain your-domain.com

Manual Setup​

Step 1: Azure Authentication​

Login to Azure:

az login

Set your subscription:

az account set --subscription <SUBSCRIPTION_ID>

Step 2: Create Resource Group​

az group create \
--name orchestr8-resources \
--location eastus2 \
--tags managed-by=orchestr8 environment=production

Step 3: Create AKS Cluster with Terraform​

O8 uses Terraform to provision Azure infrastructure. The configuration includes:

# terraform/infrastructure/azure/aks/main.tf
resource "azurerm_kubernetes_cluster" "main" {
name = var.cluster_name
location = var.location
resource_group_name = var.resource_group_name
dns_prefix = var.cluster_name

# Workload Identity for pod authentication
oidc_issuer_enabled = true
workload_identity_enabled = true

# Azure AD integration
azure_active_directory_role_based_access_control {
managed = true
azure_rbac_enabled = true
}
}

Apply the Terraform configuration:

cd terraform/infrastructure/azure
terraform init
terraform plan
terraform apply

Step 4: Get AKS Credentials​

az aks get-credentials \
--name orchestr8-cluster \
--resource-group orchestr8-resources \
--overwrite-existing

Step 5: Create Azure Key Vault​

az keyvault create \
--name orchestr8-kv-$RANDOM \
--resource-group orchestr8-resources \
--location eastus2 \
--enable-rbac-authorization true \
--enable-soft-delete true \
--retention-days 7

Azure-Specific Configuration​

Workload Identity​

O8 uses Azure AD Workload Identity for secure pod-to-Azure resource authentication:

  1. ArgoCD Identity: For GitOps operations
  2. External Secrets Identity: For Key Vault access
  3. Cert Manager Identity: For DNS challenges

Each identity is automatically configured during bootstrap.

Networking Architecture​

The default network configuration:

  • VNet CIDR: 10.0.0.0/16
  • AKS Subnet: 10.0.1.0/22 (1024 IPs)
  • Application Gateway Subnet: 10.0.5.0/24 (optional)
  • Service CIDR: 10.0.0.0/16
  • DNS Service IP: 10.0.0.10

Storage​

O8 on Azure uses:

  • Azure Disks: For persistent volumes (managed disks)
  • Azure Files: For shared storage (optional)
  • Azure Blob Storage: For Terraform state and backups

Secrets Management​

Using Azure Key Vault​

Initialize secrets management:

o8 secrets init --provider azure --key-vault <YOUR_KEY_VAULT_NAME>

Create a secret:

o8 secrets create database-password \
--provider azure \
--data '{"password": "secure-password-123"}'

List secrets:

o8 secrets list --provider azure

Get a secret:

o8 secrets get database-password --provider azure

External Secrets Integration​

O8 automatically configures External Secrets Operator to sync Azure Key Vault secrets to Kubernetes:

apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: azure-vault
spec:
provider:
azurekv:
vaultUrl: "https://<KEY_VAULT_NAME>.vault.azure.net"
authType: WorkloadIdentity
serviceAccountRef:
name: external-secrets

Cost Optimization​

Recommendations​

  1. Use Spot Instances: For non-critical workloads

    o8 bootstrap create azure --use-spot-instances
  2. Auto-scaling: Configured by default (2-10 nodes)

  3. Reserved Instances: For production workloads

  4. Resource Tagging: All resources are tagged for cost tracking

Cost Estimation​

Typical monthly costs (East US 2):

  • AKS Cluster: Free (pay only for nodes)
  • Nodes (D4s_v3 x 5): ~$350-500
  • Load Balancer: ~$25
  • Key Vault: ~$5
  • Storage: ~$20-50

Total: ~$400-600/month for a basic setup

Troubleshooting​

Common Issues​

1. Authentication Failures​

# Refresh Azure CLI credentials
az login --tenant <TENANT_ID>

# Check current context
az account show

2. Insufficient Quota​

# Check quota usage
az vm list-usage --location eastus2 --output table

# Request quota increase via Azure Portal

3. Network Connectivity​

# Test cluster connectivity
kubectl cluster-info

# Check AKS diagnostics
az aks show --name orchestr8-cluster --resource-group orchestr8-resources

4. Key Vault Access​

# Check Key Vault permissions
az keyvault show --name <KEY_VAULT_NAME>

# Verify managed identity
az identity show --name orchestr8-cluster-external-secrets-identity \
--resource-group orchestr8-resources

Getting Help​

# Check O8 status
o8 doctor --provider azure

# View AKS cluster logs
az aks get-credentials --name orchestr8-cluster --resource-group orchestr8-resources
kubectl logs -n kube-system -l component=kube-apiserver

# Azure support
az feedback

Clean Up​

To remove all Azure resources:

# Destroy the cluster
o8 bootstrap destroy azure

# Or manually delete the resource group
az group delete --name orchestr8-resources --yes --no-wait

Next Steps​

  1. Configure DNS for your domain
  2. Deploy your first module
  3. Set up monitoring and observability
  4. Configure backups and disaster recovery

Additional Resources​