vmx), so Proxmox runs KVM guests at native speed rather than in emulation. That makes one server a full Proxmox lab, a place to rehearse an on-premises estate, or the host for a Proxmox VE cluster that Ankra builds and operates.
This guide takes a fresh Debian 13 server to Proxmox VE 9, connects it to Ankra and builds a small kubeadm cluster on it. The same steps work on any provider that hands out a single public address per server. The parts specific to Ankra Cloud are the network layout (a /32 address, an on-link gateway and an MTU of 1370) and the serial console you fall back on if a network change goes wrong.
Before you start
- An Ankra Cloud account and API token, or the console, to create one server.
- An Ankra organisation, an SSH key credential, and the
ankraCLI. - A local SSH key pair to reach the server.
px-small bastion, a px-small control plane and a px-medium worker needs 8 vCPUs and 16 GB. starter-12c-24g with 200 GiB of storage leaves headroom for that. VM disks are thin, so they only use the space their guests write.
1. Create the server
Create a Debian 13 server with a public IPv4 address. Ankra reaches the Proxmox API and the cluster’s bastion through this address.ankra-cloud servers list shows them again later). Check that nested virtualisation is available before you install anything:
/dev/kvm mean KVM guests will run accelerated.
2. Install Proxmox VE
Proxmox VE installs on top of Debian 13 (trixie) from its own package repository. A cloud image needs three adjustments that a bare-metal install does not:- The network moves from netplan to ifupdown2. Proxmox reads and writes
/etc/network/interfaces; the image configures its NIC through netplan and systemd-networkd. - The NIC name is pinned. Netplan renames the NIC to
eth0by MAC address. Without netplan the kernel names itens3, theeth0stanza no longer matches anything, and the server boots with no network. A systemd.linkfile keeps the name. - GRUB gets its install device. The image carries both
grub-pcandgrub-efi, and the Proxmox kernel upgrade stops atgrub-pcuntil it is told which disk to install to.
install-proxmox-ve.sh
/32 address and its on-link gateway (169.254.0.2 on Ankra Cloud) carry over unchanged: ifupdown2 adds the onlink default route itself. The MTU of 1370 carries over too.
The web interface now answers on https://<server-ip>:8006 with a self-signed certificate. Log in as root with the password you set.
3. Create an API token for Ankra
Give Ankra its own Proxmox user with a role that holds exactly what provisioning needs:ankra@pve!ankra. Proxmox VE Credentials explains why each privilege is needed.
4. Add a jumphost user
Ankra puts the cluster’s VMs on a private network,ankra (10.20.0.0/16), behind the host’s NAT. The server has a single public address, so nothing on that network is reachable from outside, including the bastion Ankra provisions. Ankra reaches it through an SSH jumphost, and the Proxmox host itself is the natural one.
Create a user that can forward ports and do nothing else, with a key pair dedicated to Ankra:
restrict,port-forwarding gives the key no shell, no agent and no X11 forwarding, only TCP forwarding. To narrow it further, add permitopen="<server-ip>:8006" and one permitopen="<bastion-ip>:22" per cluster once you know the bastion’s address.
5. Connect the server to Ankra
--tls-insecure accepts the self-signed certificate Proxmox generated; with a DNS name for the server you can order a Let’s Encrypt certificate from Datacenter → ACME instead and leave the flag off.
Saving the credential sets up what the host is missing, which takes a few minutes the first time:
vmbr0- the NIC becomes the port of a Linux bridge that keeps the host’s address, gateway and MTU- the
ankraSDN zone, vnet and subnet, with SNAT and dnsmasq DHCP. The zone takes the uplink’s MTU (1370 here), and every cluster VM’s NIC inherits it images,rootdirandimportcontent on thelocalstorage- the
ankra-ubuntu-24-04cloud-init template, built from the Ubuntu 24.04 cloud image
local directory storage, the vmbr0 and ankra bridges, and the ankra-ubuntu-24-04 template.
6. Create a cluster
--storage local: a Proxmox VE installed on Debian has no local-lvm, which is the CLI’s default. --include-dns=false skips the generated public domain, because Traefik on a single-host Proxmox cluster has no public load balancer for the domain to point at.
Follow the build:
online once the agent connects. On this host a px-small control plane and a px-medium worker reach Ready about fifteen minutes after the create: