# Base Image : https://portal.cloud.hashicorp.com/vagrant/discover?query=ubuntu%2Fjammy64 BOX_IMAGE = "ubuntu/jammy64" BOX_VERSION = "20240823.0.1" # max number of worker nodes : Ex) N = 3 N = 2 # Version : Ex) k8s_V = '1.31' k8s_V = '1.30' cni_N = 'Calico' Vagrant.configure("2") do |config| #-----Manager Node config.vm.define "k8s-m" do |subconfig| subconfig.vm.box = BOX_IMAGE subconfig.vm.box_version = BOX_VERSION subconfig.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--groups", "/#{cni_N}-Lab"] v.customize ["modifyvm", :id, "--nicpromisc2", "allow-vms"] v.name = "#{cni_N}-k8s-m" v.memory = 4096 v.cpus = 4 v.linked_clone = true end subconfig.vm.hostname = "k8s-m" subconfig.vm.synced_folder "./", "/vagrant", disabled: true subconfig.vm.network "private_network", ip: "192.168.10.10" subconfig.vm.network "forwarded_port", guest: 22, host: 50010, auto_correct: true, id: "ssh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/init_cfg.sh", args: [ N, k8s_V ] subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/route1.sh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/control.sh", args: [ cni_N ] end #-----Router Node config.vm.define "router" do |subconfig| subconfig.vm.box = BOX_IMAGE subconfig.vm.box_version = BOX_VERSION subconfig.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--groups", "/#{cni_N}-Lab"] v.name = "#{cni_N}-router" v.memory = 1024 v.cpus = 2 v.linked_clone = true end subconfig.vm.hostname = "router" subconfig.vm.synced_folder "./", "/vagrant", disabled: true subconfig.vm.network "private_network", ip: "192.168.10.254" subconfig.vm.network "private_network", ip: "192.168.20.254" subconfig.vm.network "forwarded_port", guest: 22, host: 50000, auto_correct: true, id: "ssh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/linux_router.sh", args: [ N ] end #-----Worker Node Subnet2 config.vm.define "k8s-w0" do |subconfig| subconfig.vm.box = BOX_IMAGE subconfig.vm.box_version = BOX_VERSION subconfig.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--groups", "/#{cni_N}-Lab"] v.name = "#{cni_N}-k8s-w0" v.memory = 2048 v.cpus = 4 v.linked_clone = true end subconfig.vm.hostname = "k8s-w0" subconfig.vm.synced_folder "./", "/vagrant", disabled: true subconfig.vm.network "private_network", ip: "192.168.20.100" subconfig.vm.network "forwarded_port", guest: 22, host: 50020, auto_correct: true, id: "ssh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/init_cfg.sh", args: [ N, k8s_V ] subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/route2.sh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/worker.sh" end #-----Worker Node Subnet1 (1..N).each do |i| config.vm.define "k8s-w#{i}" do |subconfig| subconfig.vm.box = BOX_IMAGE subconfig.vm.box_version = BOX_VERSION subconfig.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--groups", "/#{cni_N}-Lab"] v.customize ["modifyvm", :id, "--nicpromisc2", "allow-vms"] v.name = "#{cni_N}-k8s-w#{i}" v.memory = 2048 v.cpus = 4 v.linked_clone = true end subconfig.vm.hostname = "k8s-w#{i}" subconfig.vm.synced_folder "./", "/vagrant", disabled: true subconfig.vm.network "private_network", ip: "192.168.10.10#{i}" subconfig.vm.network "forwarded_port", guest: 22, host: "5001#{i}", auto_correct: true, id: "ssh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/init_cfg.sh", args: [ N, k8s_V ] subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/route1.sh" subconfig.vm.provision "shell", path: "https://raw.githubusercontent.com/gasida/KANS/main/kans3/worker.sh" end end end