Before you start
- A Proxmox VE API credential: the API URL and an API token with VM management privileges. If Ankra needs to initialise storage or networking, the token also needs
Datastore.Allocate,Sys.ModifyandSDN.Use. See Proxmox VE Credentials. - An SSH key credential for VM access - your own public key, or one Ankra generates. A Proxmox cluster takes a single key. See SSH Key Credentials.
- A cloud-init VM template. If a node has none, Ankra creates one during credential setup: it downloads the Ubuntu 24.04 cloud image and registers it as the
ankra-ubuntu-24-04template. You can bring your own and pin it withtemplate- see Creating a cloud-init template. - A network bridge. Use an existing active Linux bridge, or let Ankra convert the single active management Ethernet or bond interface (static or
manualmethod) 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), andsource /etc/network/interfaces.d/*in/etc/network/interfaces(present by default on standard installs). - Free local disk 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, directly or through an SSH jumphost.
Hybrid connectivity (SSH jumphost)
Many Proxmox environments are not reachable from the internet. If Ankra cannot reach the Proxmox API and the VM network directly, attach an SSH jumphost (host, port, username and private key) to the Proxmox VE credential; Ankra then tunnels both the API calls and the SSH connections to your nodes through it. If the API uses a self-signed certificate, enable TLS insecure (tls_insecure) on the credential. Both are set on the credential - see Proxmox VE Credentials.
Create the cluster
- Dashboard
- CLI
- API
1
Open the create dialog
Go to Clusters, click Create cluster and pick Proxmox VE under Ankra Managed.
2
Credential
Pick the Proxmox VE credential and an SSH key, or add either inline.
3
Placement
Pick Single host and the Proxmox node that hosts all cluster VMs, or Host spread and two or more hosts - see Host-Spread Placement. In both modes pick the Storage for VM disks and the Network Bridge the VMs attach to. Pick the
ankra private network unless you run your own DHCP-served bridge.4
Compute
Pick the bastion size (for example
px-small), the control plane count (1 or 3) and size (for example px-medium), worker node groups, and for kubeadm the etcd topology. The wizard shows each size’s vCPUs, memory and disk.5
Kubernetes
Keep kubeadm (the default, with Cilium) or pick k3s and its CNI, and optionally the version. See Choices fixed at create time.
6
Review
Name the cluster and set its environment. Two checkboxes are on by default:
- Include Networking Stack - Traefik and cert-manager as Ankra-managed stacks. On k3s they run through the built-in service load balancer; unchecked, k3s keeps its bundled Traefik and no certificate manager (a kubeadm cluster gets no ingress controller or certificate manager at all).
- Include Public DNS - a delegated subdomain on
ankra.ccwith external-dns wired, so an ingress hostname under it gets its DNS record and TLS certificate automatically.
Verify
- The cluster moves from Provisioning to Online in the clusters list once the Ankra Agent has connected.
-
Point
kubectlat it through Ankra (this needs a Cluster Access grant) and check the nodes:Every control plane and worker should beReady. See Accessing Clusters with kubectl.
What Ankra created on your hosts
- A bastion VM - the only SSH access point Ankra uses to reach the nodes. It carries no workload or egress traffic. With a jumphost on the credential, Ankra reaches both the Proxmox API and the bastion through it.
- Control plane and worker VMs (QEMU), cloned from the cloud-init template and attached to the network you picked, plus dedicated etcd VMs for a kubeadm cluster with external etcd.
- The
vmbr0bridge and theankraSDN network, when they did not exist, set up during credential setup.
LoadBalancer Services are not provisioned. Expose workloads with NodePort Services, an ingress controller, or a load balancer you deploy yourself. The Proxmox VE Reference has the full layout.
Proxmox VE specifics
Networking
When you save a Proxmox VE credential, Ankra initialises 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 to 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:Other differences
- Resizing a node group powers each VM off, resizes it and powers it on again, with brief downtime for its workloads. Sizes only grow; for smaller nodes, create a new group and delete the old one. On a host-spread cluster, new VMs go to the least-represented eligible host.
- Restart works from the CLI (
ankra cluster proxmox nodes restart); the bastion is resized from the dashboard or the API. - A stop captures the cluster’s etcd state through the credential’s jump host before the VMs are deleted, and frees the host capacity. Terminating deletes every VM Ankra created (bastion, control planes, workers and etcd VMs) and leaves your Proxmox nodes, storage and bridges untouched.
- No cost estimate in the create wizard, because Proxmox VE has no list pricing. Cloud Cost prices running clusters from the credential’s rate card, which ships with default rates you can change.
Operate it
Day-2 tasks work the same way on every Ankra Managed provider, with the CLI nameproxmox:
- Node groups and legacy worker scaling
- Control plane
- Restart a node and the bastion
- SSH access and keys
- Upgrade Kubernetes
- Stop and start
- Terminate a cluster