iPXE + Harvester: Automate Kubernetes Hypervisor Deployment in 15 Minutes
Skip the 6GB downloads and manual clicking — network boot your way to production-ready HCI
iPXE + Harvester: Automate Kubernetes Hypervisor Deployment in 15 Minutes

Skip the 6GB downloads and manual clicking — network boot your way to production-ready HCI
What’s Harvester, and Why Should You Care?
Before diving into automation, let’s talk about what makes Harvester special. Harvester is a modern, open, interoperable, hyperconverged infrastructure (HCI) solution built on Kubernetes. It’s an open-source alternative designed for operators seeking a cloud-native HCI solution that runs on bare metal servers and provides integrated virtualization and distributed storage capabilities.
On a free medium plan? Read here for free
Think of it as the bridge between your legacy VM world and modern container orchestration. Harvester supports traditional virtual machines (VMs) and containerized environments automatically through integration with Rancher, offering a solution that unifies legacy virtualized infrastructure while enabling the adoption of containers from core to edge locations.
What makes Harvester different from VMware or Proxmox?
- Built on Kubernetes: Uses proven cloud-native technologies (KubeVirt, Longhorn, Rancher)
- Zero licensing costs: 100% open source, no per-CPU or per-VM fees
- Unified management: VMs and containers from a single pane of glass
The architecture is elegant in its simplicity:
- KubeVirt handles VM management on top of Kubernetes
- Longhorn provides distributed block storage
- Elemental delivers an immutable Linux base OS
- Rancher integration gives you enterprise-grade multi-cluster management
The Pain Point We’re Solving
I’ve been testing different Harvester versions extensively, and the traditional workflow is brutal:
The Old Way:
- Download 6GB+ ISO for each version (v1.4.1, v1.4.2, v1.3.0…)
- Wait 30–45 minutes for manual installation per attempt
- Delete VM, recreate, mount new ISO, repeat the clicking marathon
- Testing 5 versions = 3+ hours of manual work
After iPXE automation:
- One line change:
set version v1.4.2→ automatic new version - Complete reinstallation in 15 minutes, completely unattended
- Testing 5 versions = 15 minutes of actual work, rest is automated
- Perfect consistency across all test scenarios
That’s when I decided to not only automate this painful process, but really understand how Harvester’s iPXE support works under the hood.
Working Example — Boot Harvester in 15 Minutes
Let’s get something working first. We’ll create a system that automatically installs Harvester over the network, following the official Harvester iPXE documentation.
Quick Start Checklist
- Proxmox server (or any virtualization platform)
- 30 minutes of your time
- Basic command line comfort
- Your SSH public key ready (
cat ~/.ssh/id_ed25519.pub)
Step 1: Build iPXE with HTTPS Support
Most iPXE builds can’t download from modern websites like GitHub. Let’s build our own:
# Install build tools
apt update
apt install -y git build-essential liblzma-dev isolinux genisoimage
# Get iPXE source
cd /tmp
git clone https://github.com/ipxe/ipxe.git
cd ipxe/src
# Create embedded boot script
cat > embed.ipxe << 'EOF'
#!ipxe
echo iPXE starting...
dhcp
echo Network configured, loading boot script...
chain http://192.168.90.105:8080/boot.ipxe || shell
EOF
# Build with HTTPS support (takes 5-10 minutes)
make CONFIG=cloud bin/ipxe.iso EMBED=embed.ipxe
# Copy to virtualization storage
cp bin/ipxe.iso /mnt/pve/nfs-iso/template/iso/harvester-boot.iso
Pro tip: Replace 192.168.90.105 with your actual server IP. The build process downloads crypto libraries, so expect lots of compilation output.
Step 2: Create the Harvester Boot Script
Following the Harvester iPXE examples, let’s create our boot configuration:
# Create boot server directory
mkdir -p /opt/pxe-boot
cd /opt/pxe-boot
# Create main boot script
cat > boot.ipxe << 'EOF'
#!ipxe
# Harvester version management
set version v1.4.1
set base https://releases.rancher.com/harvester/${version}
# Configure network
dhcp
echo Network configured: ${net0/ip}
# Download and boot Harvester (following official iPXE format)
echo Downloading Harvester kernel...
kernel ${base}/harvester-${version}-vmlinuz-amd64 \
initrd=harvester-${version}-initrd-amd64 ip=dhcp \
net.ifnames=1 rd.cos.disable rd.noverifyssl \
console=tty1 root=live:${base}/harvester-${version}-rootfs-amd64.squashfs\
harvester.install.automatic=true harvester.install.skipchecks=true \
harvester.install.config_url=http://192.168.90.105:8080/harvester-config.yaml
echo Downloading initial ramdisk...
initrd ${base}/harvester-${version}-initrd-amd64
echo Starting Harvester installation...
boot
EOF
This script follows the exact format from the official Harvester documentation for automatic installation.
Step 3: Create Harvester Configuration
Based on the Harvester configuration schema, create your installation config:
# Create Harvester configuration (CREATE mode)
cat > harvester-config.yaml << 'EOF'
scheme_version: 1
token: "my-cluster-token"
os:
hostname: harvester-node-1
ssh_authorized_keys:
- "ssh-ed25519 YOUR_SSH_KEY_HERE"
password: "SecurePassword123"
install:
mode: create
management_interface:
interfaces:
- name: ens18
default_route: true
method: dhcp
device: /dev/sda
vip: 192.168.90.191
vip_mode: static
EOF
Important notes from Harvester docs:
mode: createestablishes the first cluster nodevip(Virtual IP) becomes your Harvester web UI access pointtokenwill be used for joining additional nodes- Replace
YOUR_SSH_KEY_HEREwith your actual public key
Step 4: Start Boot Server & Test
# Start HTTP server
python3 -m http.server 8080
# Create and start VM
qm create 121 \
--name harvester-test \
--memory 16000 \
--cores 4 \
--scsihw virtio-scsi-single \
--scsi0 local-lvm:32,iothread=1 \
--net0 virtio,bridge=vmbr0 \
--boot "order=ide2;scsi0" \
--ide2 local:iso/harvester-boot.iso,media=cdrom
qm start 121
What you’ll see:
- iPXE boots with feature list (including HTTPS support)
- Network configuration via DHCP
- Automatic download of Harvester components (~6GB total)
- Harvester installer runs with your config
- System reboots into production-ready HCI node
Access your Harvester cluster at https://192.168.90.191 (your VIP) in about 15 minutes!
Understanding the Network Boot Flow
Here’s what happens behind the scenes:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ VM Powers On │───▶│ iPXE Firmware │───▶│ Network Setup │
│ │ │ (from custom │ │ (DHCP request) │
│ │ │ ISO image) │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Production HCI │◀───│ Harvester Auto │◀───│ Downloads Boot │
│ Ready System │ │ Install (using │ │ Script (from │
│ │ │ our config) │ │ Python server) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
┌─────────────────┐ ┌─────────────────┐
│ Boots Harvester │◀───│ Downloads OS │
│ Hypervisor │ │ Files (from │
│ │ │ Rancher CDN) │
└─────────────────┘ └─────────────────┘
The Three-Server Architecture:
- Your Python server: Provides boot logic and installation config
- Rancher’s CDN: Hosts official Harvester binaries (kernel, initrd, rootfs)
- Your VM: Becomes a production Kubernetes hypervisor
Scaling to Production
Adding More Nodes (JOIN Mode)
Once your first node is running, add more nodes with JOIN mode:
# harvester-config-join.yaml
scheme_version: 1
server_url: https://192.168.90.191:443 # Your VIP from CREATE node
token: "my-cluster-token" # Same token from CREATE config
os:
hostname: harvester-node-2
ssh_authorized_keys:
- "ssh-ed25519 YOUR_SSH_KEY_HERE"
password: "SecurePassword123"
install:
mode: join
management_interface:
method: dhcp
device: /dev/sda
Create a separate iPXE script pointing to this JOIN config, and your new nodes will automatically join the cluster.
Version Testing Made Easy
Want to test Harvester v1.4.2? Just change one line:
# In boot.ipxe, change:
set version v1.4.1
# To:
set version v1.4.2
That’s it. Your entire deployment now uses the new version — no ISO downloads, no manual clicking.
Troubleshooting Like a Pro
Common Issues & Solutions
❌ “Operation not supported” on HTTPS URLs
Could not start download: Operation not supported (https://ipxe.org/3c092003)
Root cause: iPXE built without crypto support. Fix: Rebuild with make CONFIG=cloud
❌ “404 Not Found” errors
Could not start download: 404 Not Found
Debug workflow:
- Check Python server log for incoming requests
- Test URLs in browser:
[http://your-ip:8080/boot.ipxe](http://your-ip:8080/boot.ipxe) - Verify file permissions:
ls -la /opt/pxe-boot/
❌ Harvester installation fails Check the Harvester requirements:
- Minimum 8GB RAM (16GB+ recommended)
- Hardware-assisted virtualization enabled
- UEFI boot mode for production
Interactive Debugging
Press Ctrl+B during iPXE boot for debug shell:
iPXE> ifstat # Network interface status
iPXE> show net0/ip # Current IP address
iPXE> imgfetch http://192.168.1.100:8080/boot.ipxe test
iPXE> imgstat # Show downloaded images
Real-World Impact
Before iPXE + Harvester automation:
- Manual ISO downloads and installations
- Inconsistent configurations across environments
- Hours of clicking through installation wizards
- Version testing was a painful, time-consuming process
After automation:
- One-command deployment: Change version number, restart VM
- Perfect consistency across all environments
- Version testing becomes trivial
- Infrastructure provisioning shifts from manual to declarative
The mindset shift: You stop thinking “how many USBs do I need?” and start thinking “how can I automate this deployment pattern?”
Quick Start Alternative: Deploy Harvester on Cloud Providers
Don’t have bare metal servers handy? No problem! Before diving into iPXE automation, you can get started with Harvester immediately using the harvester-cloud project.
This official Rancher project lets you deploy Harvester on major cloud providers for labs, testing, and PoCs:
Supported Cloud Providers:
- Google Cloud Platform (GCP)
- Microsoft Azure
- DigitalOcean
What you get:
- Terraform/OpenTofu templates for automated deployment
- 3-node Harvester clusters ready in minutes
- Perfect for learning iPXE concepts before bare metal deployment
- Cost-effective testing environment (see cost estimates)
Quick cloud deployment:
# Clone the harvester-cloud repo
git clone https://github.com/rancher/harvester-cloud.git
cd harvester-cloud
# Choose your cloud provider
cd projects/google-cloud # or azure, digitalocean
# Follow the provider-specific README
# Deploy with Terraform in under 10 minutes
This gives you a real Harvester environment where you can practice the iPXE automation techniques we’ll cover, then apply them to your bare metal infrastructure later.
Pro tip: Use harvester-cloud for initial learning and testing, then implement the iPXE automation from this guide for your production bare metal deployments. The configuration patterns you learn transfer directly.
What’s Next?
This foundation enables you to:
- Scale Harvester deployments from single nodes to enterprise clusters
- Automate edge computing infrastructure with consistent, repeatable deployments
- Integrate with Rancher for unified VM and container management
- Version control your infrastructure by storing configs in Git
- Start with cloud providers using harvester-cloud, then migrate patterns to bare metal
The pattern works for any OS, but Harvester’s combination of large ISOs, frequent releases, and excellent automation support makes it the perfect showcase for iPXE capabilities.
Resources & References
- **Harvester Official Documentation**
- **Harvester iPXE Installation Guide**
- **Harvester iPXE Examples**
- **Harvester Configuration Reference**
- **Harvester GitHub Releases**
Quick Reference
Essential Commands
# Build iPXE with HTTPS
make CONFIG=cloud bin/ipxe.iso EMBED=embed.ipxe
# Start boot server
python3 -m http.server 8080
# Test configuration
curl http://localhost:8080/harvester-config.yaml
Key Files
embed.ipxe # Embedded in iPXE ISO
boot.ipxe # Main boot logic
harvester-config.yaml # Harvester installation config
Testing URLs
- Boot server:
[http://your-ip:8080/boot.ipxe](http://your-ip:8080/boot.ipxe) - Config:
[http://your-ip:8080/harvester-config.yaml](http://your-ip:8080/harvester-config.yaml) - Harvester releases:
[https://releases.rancher.com/harvester/](https://releases.rancher.com/harvester/)
Remember: Change one line (set version v1.4.2) to test any Harvester version. That's the power of network-based automation combined with Harvester's excellent iPXE support.
Connect & Continue Learning 🚀
Enjoyed this article? Clap until your fingers hurt (or just 50 times, whichever comes first)! You can also buy me a book.
**Read my other articles**, because one tech rabbit hole deserves another!
**Connect with me on LinkedIn** for more tech insights, it’s like subscribing, but with fewer annoying notifications.
Have a suggestion for my next post? Drop a comment below! I read them all (even the ones suggesting I should’ve used spaces instead of tabs).
P.S. Let me know what topics you’d like me to cover next!
메타데이터
- post_id
- 66281725b2ca
- slug
- ipxe-for-beginners-boot-servers-over-the-network-66281725b2ca
- url
- https://medium.com/@rk90229/ipxe-for-beginners-boot-servers-over-the-network-66281725b2ca
- canonical_url
- https://medium.com/@rk90229/ipxe-for-beginners-boot-servers-over-the-network-66281725b2ca
- author_url
- https://medium.com/@rk90229
- status
- ok
- fetched_at
- 2026-07-19 04:09:58