Prerequisites
Before creating a Proxmox VE cluster, you need two credentials:Proxmox VE API Credential
The Proxmox API URL and an API token with VM management privileges. If Ankra needs to initialize storage or networking, the token also needs
Datastore.Allocate, Sys.Modify, and SDN.Use. See Proxmox VE Credentials.SSH Key Credential
An SSH public key for VM access. You can provide your own or let Ankra generate one. See SSH Key Credentials.
- A cloud-init VM template. If no template exists on a node, Ankra creates one automatically during credential setup: it downloads the Ubuntu 24.04 cloud image and registers it as the
ankra-ubuntu-24-04template. You can also bring your own template and pin it with thetemplateoption — see Creating a cloud-init template. - A network bridge. You can provide an existing active Linux bridge. If none exists, Ankra converts the single active management Ethernet or bond interface (static or
manual-method) tovmbr0. Ankra also creates a private NAT networkankra(10.20.0.0/16) through Proxmox SDN — see Networking. - The
dnsmasqpackage on each node for the private network’s DHCP (apt install dnsmasq && systemctl disable --now dnsmasq), and/etc/network/interfacesmust containsource /etc/network/interfaces.d/*(present by default on standard Proxmox installs). - Local free disk space or existing VM storage. If no active storage supports VM images, Ankra enables
imagesandrootdiron thelocaldirectory storage, or creates it at/var/lib/vz. Theimportcontent type is enabled onlocalfor cloud-image downloads. - API reachability. The Proxmox API must use HTTPS and be reachable from Ankra either directly or through an SSH jumphost.
Hybrid Connectivity (SSH Jumphost)
Many Proxmox environments are not directly reachable from the internet. If the Proxmox API and the VM network cannot be reached from Ankra, attach an SSH jumphost (host, port, username, and private key) to your Proxmox VE credential. Ankra then tunnels both the Proxmox API calls and the SSH connections to your cluster nodes through the jumphost. If your Proxmox API uses a self-signed certificate, enable the TLS insecure toggle (tls_insecure) on the credential.
Both options are configured on the credential - see Proxmox VE Credentials.
Creating a Proxmox VE Cluster
Via the Platform UI
1
Navigate to Clusters
Go to Clusters in the Ankra dashboard and click Create Cluster.
2
Select Proxmox VE
Choose Proxmox VE as the provider.
3
Select Credentials
Pick your Proxmox VE API credential and SSH key credential from the dropdowns. You can also create new credentials directly from the wizard.
4
Choose Placement
Pick Single host or Host spread placement. With single host, select the Proxmox node that hosts all cluster VMs. With host spread, select two or more compatible hosts and Ankra distributes the Kubernetes VMs across them - see Host-Spread Placement. In both modes, select the storage for VM disks and the network the VMs attach to. Pick the
ankra private network (created during credential setup) unless you operate your own DHCP-served bridge.5
Configure Nodes
Set your cluster topology:
- Bastion - Instance size for the SSH bastion VM (e.g.,
px-small) - Control Plane - Count (1, 3, or 5) and size (e.g.,
px-medium) - Workers - Count and size (e.g., 2×
px-medium)
6
Choose Distribution
Pick the Kubernetes distribution:
kubeadm Vanilla upstream Kubernetes bootstrapped with
kubeadm and containerd (preselected). kubeadm clusters always use Cilium CNI and optionally support an external etcd topology with dedicated etcd VMs.
k3s Lightweight Kubernetes with a user-selectable CNI (Flannel default, Calico, or Cilium).See Kubernetes Distribution for details.7
Create & Track Progress
Click Create to start provisioning. A live progress view tracks credential setup, SSH key deployment, bastion provisioning, VM creation, Kubernetes installation (k3s or kubeadm), and Ankra Agent setup. The cluster appears with an offline state until provisioning completes, then transitions to online.
Via the API
Create the Proxmox VE credential and SSH key credential from the portal first. Prefer the terminal? The
ankra CLI covers the same lifecycle - see ankra cluster proxmox for create, stop, start, nodes, hosts, storages, and templates.Cluster Configuration Options
Instance Sizes
Proxmox VE clusters use fixed instance size presets:Proxmox VE has no list pricing, so Ankra does not show cost estimates for Proxmox clusters - neither in the creation wizard nor in Cloud Cost.
Networking
When you save a Proxmox VE credential, Ankra initializes two networks when they do not already exist:vmbr0 (management bridge). If no active bridge exists, Ankra converts the single active Ethernet or bond management interface to vmbr0. A statically addressed interface’s address and gateway move to the bridge; a manual-method interface (common on dedicated-server providers such as Scaleway) converts to an address-less bridge. The physical interface becomes the bridge’s uplink. DHCP-managed management interfaces cannot be converted through the Proxmox API — create the bridge manually in that case. Ankra refuses the conversion when the management interface is ambiguous, has custom options, or another network change is pending.
ankra (private SDN network). Ankra creates a Proxmox SDN simple zone named ankra with a vnet of the same name and the subnet 10.20.0.0/16 (gateway 10.20.0.1). The subnet has SNAT enabled, so Proxmox masquerades outbound VM traffic through the host’s public interface, and DHCP served by dnsmasq (range 10.20.1.1–10.20.254.254) backed by the built-in PVE IPAM. Because addresses are registered in the IPAM the moment a VM’s NIC attaches, Ankra reads VM addresses without requiring the QEMU guest agent in the image.
Recommended setup. Place cluster VMs on the ankra network — it appears alongside Linux bridges in the cluster creation wizard. This keeps Kubernetes traffic off the management bridge and gives VMs internet access through NAT without exposing them publicly. Because the VMs are private, attach the Proxmox host itself (or another host with a route into 10.20.0.0/16) as the SSH jumphost on the credential so Ankra can reach the bastion.
Creating a cloud-init template
Ankra clones a cloud-init VM template for every cluster VM. Nodes without any template get one automatically: during credential setup Ankra downloads the Ubuntu 24.04 cloud image and registers it as theankra-ubuntu-24-04 template. Nodes that already carry a template are left untouched, so a custom template always wins.
Create your own template when you need a different distribution, a hardened image, or pre-installed packages. The steps below use Ubuntu 24.04. Adjust the image URL and VM ID for your environment.
The template VM ID (9000 in this example) must be unique on your node. Ankra auto-picks the template with the lowest VMID unless you pin one with the
template option at cluster creation time.Host-Spread Placement
When your Proxmox VE cluster has multiple nodes, you can spread the Kubernetes VMs across them so a single host failure does not take down the whole Kubernetes cluster. Host spread is opt-in: passplacement_nodes with two or more nodes via the API, or pick Host spread in the creation wizard.
Prerequisites
Every selected host must be online and provide the same-named resources, because VMs are cloned locally on each host:- Active storage with the selected name that allows VM images (e.g.,
local-lvmon every host). - An active bridge with the selected name (e.g.,
vmbr0on every host), all attached to the same DHCP network. - A cloud-init template with the same name on every host. Ankra resolves each host’s own template VMID and clones locally - shared-storage cross-node cloning is not used.
node stays required and must be one of the placement_nodes; the bastion always runs there.
How VMs are distributed
Ankra assigns control planes, dedicated etcd members, and each worker group deterministically: the host with the fewest members of the same role or group wins, ties break by fewest total Kubernetes VMs, then by your selected-node order. Every Kubernetes node is labeled withtopology.kubernetes.io/zone=<proxmox-node> so you can use standard topology spread constraints and pod anti-affinity against the physical failure domain.
Later scaling keeps the policy: adding node groups, scaling them up, and adding control planes all place new VMs on the least-represented eligible host. Restart, resize, upgrade, and delete operations stay pinned to each VM’s recorded host.
Requirements and limitations
- At least 3 control planes. Host-spread clusters must be created with 3 or 5 control plane nodes so the Kubernetes control plane keeps quorum when one host fails.
- Two hosts give reduced resilience. With only two hosts, losing the host that carries the control-plane majority still takes the Kubernetes API down. Three or more hosts are recommended.
- The bastion is not spread. It runs on the primary
node; if that host fails, Ankra’s SSH path to the cluster is unavailable until the host returns, while workloads keep running. - No Proxmox HA-manager integration. Ankra does not enroll VMs in Proxmox HA groups and never live-migrates or recreates VMs on another host after a failure. Resilience comes from Kubernetes replication across hosts, so run workloads with multiple replicas spread over zones.
Workload guidance
For a workload to survive a host outage, run at least two replicas and spread them across zones:Kubernetes Distribution
Proxmox VE clusters can be provisioned with either kubeadm (preselected in the create wizard) or k3s (the API and CLI default whendistribution is omitted).
kubeadm clusters always use Cilium CNI (eBPF-based networking, L7 policies, Hubble observability). The CNI cannot be changed after creation.
External etcd topology (kubeadm)
By default kubeadm runs etcd stacked on the control plane nodes. For larger clusters you can run etcd on dedicated VMs by settingetcd_topology to external:
Node Groups
Node groups let you organize worker nodes into logical groups with independent instance sizes, counts, labels, and taints. Each group can be scaled, resized, and configured independently. Node groups are managed from the portal or the API.Via the Platform UI
Navigate to cluster Settings > Nodes to manage node groups. From this tab you can:- View all node groups with their instance size, count, labels, and taints
- Add new node groups with a name, instance size, count, and optional labels/taints
- Scale individual groups up or down (0–100 nodes)
- Upgrade the instance size (upgrade only - see Instance Size Changes)
- Edit labels and taints per group
- Delete a node group and all its VMs
List Node Groups
Add a Node Group
Scale a Node Group
Instance Size Changes
Update Labels and Taints
Delete a Node Group
Node Group API Reference
Restarting a Node
Restart any node - a control plane node, a worker, or the bastion - as a tracked operation, from cluster Settings > Nodes in the dashboard, via the CLI or API, or by asking the Ankra AI assistant (e.g. “restart the bastion on my-cluster”).Resizing the Bastion
Resize the bastion without recreating the cluster - Ankra powers it off, resizes it, and powers it back on.Legacy Worker Scaling
The legacyscale-workers and worker-count endpoints operate on all workers as a single pool.
Prefer using Node Groups for more granular control.
Upgrading Kubernetes Version
You can upgrade the Kubernetes version on all nodes in a Proxmox VE cluster. Upgrades are applied to control plane nodes first, then workers. Both k3s and kubeadm clusters are supported.Check Current Version
Upgrade Version
"target_version": "v1.31.0").
Stopping and Starting a Cluster
You can stop a Proxmox VE cluster to release its compute (the cluster VMs on your Proxmox nodes) while keeping its configuration, stacks, and credentials in Ankra. Starting the cluster re-provisions the VMs and reconciles the cluster back to a running state. This is useful for freeing host capacity when a cluster is not needed. When starting, usescope=control_plane to bring up only the control plane first (for example to inspect or repair it), or scope=all (the default) to provision the whole cluster.
Stop and start are background operations. A start returns
409 if a stop or terminate operation is still running. The cluster’s saved topology is preserved while stopped and re-provisioned on the next start. From the terminal, use ankra cluster proxmox stop and ankra cluster proxmox start.Deprovisioning
Deprovisioning deletes all VMs Ankra created on your Proxmox nodes (bastion, control planes, workers, and dedicated etcd VMs if any) and removes the cluster from Ankra. Your Proxmox nodes, storage, and bridges are left untouched.Architecture
A Proxmox VE cluster provisions the following infrastructure:
All VMs are QEMU virtual machines on the Proxmox node you selected, attached to the selected network. Ankra initializes
vmbr0 (management) and the ankra private SDN network (10.20.0.0/16 with SNAT and DHCP) during credential setup when they do not already exist. Place cluster VMs on ankra — they receive DHCP addresses from the zone’s dnsmasq instance and reach the internet through the host’s public interface via SNAT.
The bastion VM provides the only SSH access point Ankra uses to reach the cluster nodes - it carries no workload or egress traffic. When an SSH jumphost is configured, Ankra reaches both the Proxmox API and the bastion through the jumphost (without one, Ankra connects to the bastion directly).
Proxmox VE clusters do not include a cloud controller manager or load balancer integration -
external_cloud_provider is not supported. Kubernetes LoadBalancer services are not provisioned automatically; expose workloads with NodePort services, an ingress controller, or a load balancer solution you deploy yourself.