Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save JonTheNiceGuy/6ea77cb3e04eed48c4038ca06de3d0ae to your computer and use it in GitHub Desktop.
Save JonTheNiceGuy/6ea77cb3e04eed48c4038ca06de3d0ae to your computer and use it in GitHub Desktop.

Using Vagrant with Multi-Node MicroK8S to experiment with Kubernetes

This script (using Vagrant) is used to build a pair of Ubuntu based virtual machines that have the MicroK8S setup of Kubernetes.

It also installs docker, and sets up aliases for kubectl in line with the MicroK8S documentation.

Please note that this script relies on the fact that Vagrant transfers files in /vagrant to the host file system, which we can then use to setup the second node.

If you only want a single node version, here's a similar repository.


On my Windows machine, I wanted to follow the advice of a colleague and run MicroK8S to experiment with Kubernetes. I followed the advice on MicroK8S, and tried to use Multipass and found that it recommends using Hyper-V on Windows Hosts. Unfortunately, on my machine, I also use VirtualBox for some machines I've worked with, so I'm unable to use the Hyper-V based MultiPass. Multipass does allow a VirtualBox backend, however, it doesn't then bridge an interface, nor does it allow port forwarding.

Vagrant.configure("2") do |config| = "ubuntu/bionic64" "public_network",
use_dhcp_assigned_default_route: true
config.vm.provider "virtualbox" do |vb|
vb.memory = 4096
vb.cpus = 2
config.vm.provision "shell", inline: <<-EOF
snap install microk8s --classic
snap install docker
microk8s.status --wait-ready
microk8s.enable dns dashboard registry
usermod -a -G microk8s vagrant
echo "alias kubectl='microk8s.kubectl'" > /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases
echo "alias kubectl='microk8s.kubectl'" > /root/.bash_aliases
chown root:root /root/.bash_aliases
config.vm.define "microk8s_a" do |microk8s_a|
microk8s_a.vm.hostname = "microk8s-a"
microk8s_a.vm.provider "virtualbox" do |vb| = "microk8s-a"
microk8s_a.vm.provision "shell", inline: <<-EOF
export local_ip="$(ip route | grep default | grep enp0s8 | cut -d' ' -f9)"
microk8s.add-node | grep $local_ip | tee /vagrant/add_k8s
config.vm.define "microk8s_b" do |microk8s_b|
microk8s_b.vm.hostname = "microk8s-b"
microk8s_b.vm.provider "virtualbox" do |vb| = "microk8s-b"
microk8s_b.vm.provision "shell", inline: <<-EOF
bash -x /vagrant/add_k8s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment