AKSCluster Custom Resource
An AKSCluster provisions an Azure Kubernetes Service cluster with a dedicated resource group, virtual network, and node pools for GPU inference and system workloads. It outputs a Secret containing the cluster kubeconfig that consumers use to target the cluster. The kubeconfig embeds a client certificate, so consumers need no separate cloud identity.
#Metadata
#Example
Manifest
apiVersion: infrastructure.modelplane.ai/v1alpha1
kind: AKSCluster
metadata:
name: inference-westeurope
namespace: platform
spec:
location: westeurope
kubernetesVersion: "1.34"
nodePools:
- name: system
role: System
vmSize: Standard_D8s_v5
nodeCount: 2
- name: gpuh100
role: GPU
vmSize: Standard_ND96isr_H100_v5
diskSizeGb: 200
# GPU pools need at least one node: the AKS cluster autoscaler cannot
# scale a pool whose GPUs bind through DRA up from zero.
nodeCount: 1
minNodeCount: 1
maxNodeCount: 8
# The pool's VM Scale Set placement group lands its nodes on one
# physical InfiniBand fabric. Requires the AKSInfinibandSupport
# feature flag registered on the subscription.
fabric: InfiniBand
gpu:
acceleratorType: nvidia-h100
#Spec
AKSClusterSpec defines the desired state of AKSCluster.
AKS cluster Kubernetes version. Must be a version AKS currently supports. Defaults to a version where Dynamic Resource Allocation (how GPUs bind to pods) is generally available.
Azure region for the cluster (e.g. westeurope, eastus2).
Virtual network configuration. Azure subnets span all Availability Zones in a region, so one subnet serves every node pool. Override when peering multiple clusters to avoid CIDR collisions. CIDRs must not overlap the cluster’s service CIDR (10.96.0.0/16) or the overlay pod CIDR (10.244.0.0/16).
OS disk size in GB.
High-performance node-to-node fabric for multi-node engines. None uses standard VNet networking (TCP). InfiniBand relies on the pool’s VM Scale Set placement group landing all nodes on one physical InfiniBand fabric. It requires the AKSInfinibandSupport feature flag on the subscription and an InfiniBand-capable VM size (e.g. Standard_ND96isr_H100_v5), and needs the NVIDIA network operator on the cluster to expose RDMA devices to pods, which Modelplane installs when any pool sets InfiniBand.
GPU configuration. Required when role is GPU.
GPU accelerator type (e.g. nvidia-a100, nvidia-h100). Used to label GPU nodes; the actual GPU and count are determined by the VM size.
Maximum number of nodes for autoscaling.
Minimum number of nodes for autoscaling. Set it to 1 or higher for GPU pools: the AKS cluster autoscaler currently cannot scale a pool whose GPUs bind through DRA up from zero nodes, so a pod scheduled to an empty pool waits forever.
Unique name for this node pool, used as the AKS agent pool name. AKS restricts Linux pool names to at most 12 lowercase alphanumeric characters starting with a letter.
Initial number of nodes.
Determines what workloads this pool runs. System pools host controllers, gateways, and infrastructure. GPU pools host inference workloads and get the NVIDIA driver installed by AKS.
Azure VM size (e.g. Standard_D4s_v5, Standard_NC24ads_A100_v4, Standard_ND96isr_H100_v5).
#Status
Observed ModelCache RWX storage state.
Name of the Modelplane-managed ReadWriteMany StorageClass composed on this cluster for ModelCache PVCs. ModelCache reads this to target the cache PVC.
Key within the Secret that holds the credential data.
Name of the Secret.
The type of credential this secret contains. Kubeconfig contains a kubeconfig file with the cluster endpoint, CA certificate, and a client certificate for a cluster-admin local account.