Skip to main content

Cloud Providers

KubeAid provisions Kubernetes clusters on cloud providers using API-managed hosts. The cloud APIs automatically create, configure, and manage your infrastructure lifecycle.

Common Prerequisites​

All cloud providers require:

Install KubeAid CLI​

KUBEAID_CLI_VERSION=$(curl -s "https://api.github.com/repos/Obmondo/kubeaid-cli/releases/latest" | jq -r .tag_name)
OS=$([ "$(uname -s)" = "Linux" ] && echo "linux" || echo "darwin")
CPU_ARCHITECTURE=$([ "$(uname -m)" = "x86_64" ] && echo "amd64" || echo "arm64")

wget "https://github.com/Obmondo/kubeaid-cli/releases/download/${KUBEAID_CLI_VERSION}/kubeaid-cli-${KUBEAID_CLI_VERSION}-${OS}-${CPU_ARCHITECTURE}"
sudo mv kubeaid-cli-${KUBEAID_CLI_VERSION}-${OS}-${CPU_ARCHITECTURE} /usr/local/bin/kubeaid-cli
sudo chmod +x /usr/local/bin/kubeaid-cli

AWS​

Provisions a KubeAid-managed Kubernetes cluster in AWS with:

AWS Prerequisites​

aws ec2 create-key-pair \
--key-name kubeaid-demo \
--query 'KeyMaterial' --output text --region <aws-region> > ./outputs/<cluster-name>.pem

AWS Setup​

# Generate configuration
kubeaid-cli config generate aws

# Edit outputs/configs/general.yaml and secrets.yaml

# Bootstrap the cluster
kubeaid-cli cluster bootstrap

# Access the cluster
export KUBECONFIG=./outputs/kubeconfigs/main.yaml
kubectl cluster-info

AWS Cleanup​

kubeaid-cli cluster delete main
kubeaid-cli cluster delete management

Azure​

Provisions a KubeAid-managed Kubernetes cluster in Azure with:

Azure Prerequisites​

  • Linux or MacOS with at least 16GB RAM (8GB may cause OOM issues)
  • Register a Service Principal in Microsoft Entra ID
  • OpenSSH keypair for VM access:
    ssh-keygen -t rsa -b 4096 -f azure-ssh-key
  • RSA key pair in PEM format for Azure Workload Identity:
    openssl genrsa -out jwt-signing-key.pem 2048
    openssl rsa -in jwt-signing-key.pem -pubout -out jwt-signing-pub.pem

Azure Setup​

# Generate configuration
kubeaid-cli config generate azure

# Edit outputs/configs/general.yaml and secrets.yaml

# Bootstrap the cluster
kubeaid-cli cluster bootstrap

# Access the cluster
export KUBECONFIG=./outputs/kubeconfigs/main.yaml
kubectl cluster-info

Azure Upgrade​

kubeaid-cli cluster upgrade --new-k8s-version v1.32.0
# Add --new-image-offer for OS upgrade

Azure Cleanup​

kubeaid-cli cluster delete main
kubeaid-cli cluster delete management

Hetzner​

Hetzner supports three deployment modes:

ModeControl PlaneWorkersAutoscaling
HCloudHCloud VMsHCloud VMs✅ Scale to/from 0
Bare MetalBare MetalBare Metal❌
HybridHCloud VMsHCloud + Bare Metal✅ (HCloud only)

All modes include:

HCloud Mode​

HCloud Prerequisites​

HCloud Setup​

kubeaid-cli config generate hetzner hcloud
# Edit outputs/configs/general.yaml and secrets.yaml
kubeaid-cli cluster bootstrap

Bare Metal Mode​

Bare Metal Prerequisites​

  • Create SSH KeyPair at https://robot.hetzner.com/key/index

    No 2 Hetzner Bare Metal SSH KeyPairs can have the same public key

  • If setting cloud.hetzner.bareMetal.wipeDisks: True, remove pre-existing RAID:
    wipefs -fa <partition-name>  # For each partition

Bare Metal Disk Layout​

For each server:

  • Level 1 SWRAID across specified disk WWNs
  • 25G LVG named vg0 with 10G root volume

Configure further via diskLayoutSetupCommands. Recommendations:

  • Allocate HDDs/SSDs to Ceph
  • Allocate NVMes to a ZPool (mirror mode) for ContainerD, logs, and OpenEBS ZFS LocalPV

Bare Metal Setup​

kubeaid-cli config generate hetzner bare-metal
# Edit outputs/configs/general.yaml and secrets.yaml
kubeaid-cli cluster bootstrap

Hybrid Mode​

Combines HCloud control plane with mixed HCloud + Bare Metal workers.

Hybrid Prerequisites​

  • Both HCloud and Bare Metal SSH KeyPairs (see above)
  • Same disk wipe requirements as Bare Metal mode

Hybrid Setup​

kubeaid-cli config generate hetzner hybrid
# Edit outputs/configs/general.yaml and secrets.yaml
kubeaid-cli cluster bootstrap

Hetzner Cleanup​

All modes:

kubeaid-cli cluster delete main
kubeaid-cli cluster delete management

Common Operations​

Access Cluster​

export KUBECONFIG=./outputs/kubeconfigs/main.yaml
kubectl cluster-info

Logs are saved in outputs/.log. Access ArgoCD and Grafana dashboards for monitoring.

See Also​