Traverse Ten64

An eight-core ARM64 networking platform with mainline Linux support

Nov 17, 2020

Simple Virtualization with μVirt (Bonus: Self-contained Kubernetes Clusters)

by Mathew M

As you may have read in Thomas’ field report and in our campaign pitch, we built a small virtualization host called μVirt (pronounced microvirt and written as muvirt in pure ASCII) that can host virtual machines on top of OpenWrt. This allows you to use OpenWrt for your connectivity needs (routing, firewall, DNS/DHCP) while using guest VMs to run more advanced functions like storage, container hosts, media servers, and IoT.

Ten64’s hardware features - such as eight cores, the ability to use fast SSD storage, and support for up to 32 GB of RAM - make it an ideal but small VM host.

μVirt is not a replacement for full featured hypervisors such as ESXi, oVirt, or Proxmox as it does not have many of their bells and whistles. However, its small size makes it an ideal testbed for some of the innovative features of Ten64 and its NXP LS1088 SoC.

μVirt at a Glance

Based on OpenWrt

The host system can provide networking services to the guest VMs and local network. This is ideal for when you want a single appliance to route your local network and serve complex applications, such as NAS, container stacks, and private cloud. Since μVirt leverages OpenWrt’s network stack, it’s ideal for customer-edge applications with cellular/4G/5G and Wi-Fi.

Mature Web Interface

μVirt uses LuCI, OpenWrt’s web interface module, for VM provisioning and management.

Robust Catalog of VMs

Use μVirt’s Appliance Store interface to select and deploy VMs from major distributions.

cloud-init Support

Use the industry-standard cloud-init for easily setting the user password and SSH keys for VMs.

Device Passthrough

USB devices, PCIe devices, and DPAA2 containers all work with passthrough to VMs. Devices known to work under passthrough include LimeSDR, ZigBee adapters, AI accelerators/TPUs, and Wi-Fi cards.

Hardware Acceleration Offload (Preview!)

We’re making good progress on hardware acceleration and offload features (e.g., NXP DPAA2). See DPDMUX for details.

VM Images Compatible with μVirt

μVirt is designed to run ARM64 "cloud" images released by most distributions. These typically use an EFI+GRUB bootloader setup.

Distributions with compatible images include:

Additional support for conventional ISO/DVD installers is in progress. A recent refactor of the provisioning system also allows the VM setup process to be customized for certain applications such as K3OS (see below).

As part of the experimental DPAA2 hardware acceleration support, μVirt can also run Ten64’s OpenWrt image.

Virtualization Alternatives

μVirt is not the only way to run virtual machines on Ten64, you can also use KVM-based virtualization from your favorite distribution.

If you want to use a traditional libvirt stack, openSUSE Leap 15.2 runs on Ten64 today and supports KVM virtualization and Linux Containers (LXC) — see the openSUSE Virtualization Guide for more information.

You can also launch a VM using qemu directly, in much the same way μVirt does:

qemu-system-aarch64 -nographic \
    -cpu host -machine type=virt,gic-version=host -m $VM_MEM -enable-kvm \
    -bios QEMU_EFI.fd  \
    -serial tcp::$GUEST_CONSOLE_TELNET_PORT,server,telnet \
    -smp $VM_CORES \
    -device virtio-rng-pci \
    -hda "${ROOTFS_IMG}" \
    -netdev user,id=defaultnet -device virtio-net,netdev=defaultnet

Bonus: Kubernetes cluster with μVirt and K3OS

Thanks to μVirt’s simplicity, it is a good test ground for developing custom integrations. A setup wizard was recently added to μVirt that can create a self-contained Kubernetes cluster based on the K3S/K3OS distribution.

With just a simple command, k3os-cluster-wizard, you can set up a Kubernetes controller node with multiple worker nodes without having to manually connect worker nodes to the cluster.

The setup wizard handles the process of creating virtual machines for both controller and worker nodes and creating the configuration file needed for the k3os automated setup process. Thanks to μVirt’s OpenWrt roots, it can also add DHCP reservations for each node.The result is a nice, tidy cluster you can use right away for your Kubernetes experimentation:

A more practical use case would be to deploy a Ten64 as part of an "edge computing" architecture, managed by a server in the cloud. Ten64’s support for VPN acceleration, wired and wireless/cellular connectivity, and scalable resources (with large SSDs and RAM) make it well suited to such tasks.

The good news is that k3os-cluster-wizard can be used to create worker nodes that connect to any k3s cluster - these can be both locally (on your LAN), and remote - connecting to a k3s controller in the cloud.

You can view the installation guide and manifest files shown in the video above in our kubeblueprint repository.


Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects