Multi-node k3s cluster using Vagrant with the virtualbox provider
Table of contents
No headings in the article.
This script allows me to bring a multi-node k3s cluster running on Alpine:
server_ip = "192.168.56.10"
workers = {
"k3s-worker1" => "192.168.56.11",
"k3s-worker2" => "192.168.56.12",
"k3s-worker3" => "192.168.56.13",
"k3s-worker4" => "192.168.56.14",
}
Vagrant.configure("2") do |config|
config.vm.box = "generic/alpine318"
config.vm.box_check_update = false
config.vm.define "k3s-server", primary: true do |server|
server.vm.network "private_network", ip: server_ip
server.vm.synced_folder "./shared", "/vagrant_shared"
server.vm.hostname = "k3s-server"
server.vm.provider "virtualbox" do |vb|
vb.memory = "8192"
vb.cpus = "16"
end
server.vm.provision "shell", inline: <<-SHELL
sudo -i
apk add iptables ip6tables
ip addr show
export INSTALL_K3S_EXEC="--bind-address=#{server_ip} --node-external-ip=#{server_ip} --node-ip=#{server_ip} --disable=metrics-server,servicelb,traefik --flannel-iface=eth1 --snapshotter=stargz"
curl -sfL https://get.k3s.io | sh -
until cp -v /var/lib/rancher/k3s/server/token /vagrant_shared/; do echo 'sleeping for 2 seconds before try'; sleep 2; done
until cp -v /etc/rancher/k3s/k3s.yaml /vagrant_shared/; do echo 'sleeping for 2 seconds before try'; sleep 2; done
cat /etc/rancher/k3s/k3s.yaml
SHELL
end
workers.each do |worker_name, worker_ip|
config.vm.define worker_name do |worker|
worker.vm.network "private_network", ip: worker_ip
worker.vm.synced_folder "./shared", "/vagrant_shared"
worker.vm.hostname = worker_name
worker.vm.provider "virtualbox" do |vb|
vb.memory = "8192"
vb.cpus = "16"
end
worker.vm.provision "shell", inline: <<-SHELL
sudo -i
apk add iptables ip6tables
ip addr show
export K3S_TOKEN_FILE=/vagrant_shared/token
export K3S_URL=https://#{server_ip}:6443
export INSTALL_K3S_EXEC="--bind-address=#{worker_ip} --node-external-ip=#{worker_ip} --node-ip=#{worker_ip} --flannel-iface=eth1 --snapshotter=stargz"
curl -sfL https://get.k3s.io | sh -
SHELL
end
end
end
The server_ip
(192.168.56.10) was obtained from host by running:
$ ip addr show | grep vbox
35: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet