Vagrant.configure("2") do |config| config.vm.box = "hashicorp/bionic64" config.vm.box_check_update = false NUM_MASTER_NODE = 1 NUM_WORKER_NODE = 3 # Provision core-linux Master Nodes (1..NUM_MASTER_NODE).each do |i| config.vm.define "master-#{i}" do |node| node.vm.provider "hyperv" do |h| h.memory = 2048 h.cpus = 2 h.vm_integration_services = { guest_service_interface: true } h.vmname = "master-#{i}" end node.vm.synced_folder ".", "/vagrant", disabled: true node.vm.network "public_network", ip: "192.168.99.9#{i}", bridge: "k8s-Switch" node.vm.hostname = "master-#{i}" node.vm.network "forwarded_port", guest: 22, host: "273#{i}" # netplan node.vm.provision "file", source: ".\\kubeadm\\01-netcfg.yaml", destination: "/home/vagrant/01-netcfg.yaml" node.vm.provision "shell", inline: "sed 's/192.168.99.99/192.168.99.9#{i}/' /home/vagrant/01-netcfg.yaml > /tmp/01-netcfg.yaml" node.vm.provision "shell", inline: "sudo mv -f /tmp/01-netcfg.yaml /etc/netplan/ -v" node.vm.provision "shell", inline: "sudo netplan apply" # add windows 10 friendly ssh pub key node.vm.provision "file", source: ".\\.ssh\\id_ed25519.pub", destination: "/home/vagrant/id_ed25519.pub" node.vm.provision "shell", inline: <<-SHELL cat /home/vagrant/id_ed25519.pub >> /home/vagrant/.ssh/authorized_keys SHELL # install applications node.vm.provision "Running-Kubeadm", type: "shell", :path => "kubeadm/install.sh" # restart vm node.vm.provision :reload # disable swap node.vm.provision :shell, :inline => "sudo swapoff -a", run: "always" # kubeadm init node.vm.provision "shell", inline: "sudo kubeadm init --apiserver-advertise-address 192.168.99.9#{i} --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all >> /home/vagrant/kubeinit.log 2>&1" node.vm.provision "shell", inline: "sleep 60" # create .kube/config file node.vm.provision "shell", inline: "sudo mkdir -p /home/vagrant/.kube" node.vm.provision "shell", inline: "sudo cp -i -f /etc/kubernetes/admin.conf /home/vagrant/.kube/config" node.vm.provision "shell", inline: "sudo chown $(id vagrant -u):$(id vagrant -g) /home/vagrant/.kube/config" node.vm.provision "shell", inline: "sleep 30" # create join command node.vm.provision "shell", inline: <<-SHELL joinCommand=$(kubeadm token create --print-join-command 2>/dev/null) echo "$joinCommand --ignore-preflight-errors=all" > /home/vagrant/joincluster.sh SHELL # kubernetes networking node.vm.provision "file", source: ".\\kubeadm\\net.yaml", destination: "/home/vagrant/net.yaml" node.vm.provision "shell", inline: "echo 'sudo kubectl apply -n kube-system -f /home/vagrant/net.yaml' | at now", privileged: false # copy joincluster.sh and .kube/conf locally $script = <<-SCRIPT scp -i .ssh\\id_ed25519 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no vagrant@192.168.99.9#{i}:/home/vagrant/joincluster.sh ./.tmp/" scp -i .ssh\\id_ed25519 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no vagrant@192.168.99.9#{i}:/home/vagrant/.kube/config ./.tmp/" SCRIPT node.trigger.after :up do |trigger| trigger.info = "Copy joincluster.sh and .kube/conf locally" trigger.run = {inline: $script} end end end # Provision core-linux Worker Nodes (1..NUM_WORKER_NODE).each do |i| config.vm.define "worker-#{i}" do |node| node.vm.provider "hyperv" do |h| h.memory = 2048 h.cpus = 2 h.vm_integration_services = { guest_service_interface: true } h.vmname = "worker-#{i}" end node.vm.synced_folder ".", "/vagrant", disabled: true node.vm.network "public_network", ip: "192.168.99.8#{i}", bridge: "k8s-Switch" node.vm.hostname = "worker-#{i}" node.vm.network "forwarded_port", guest: 22, host: "272#{i}" # netplan node.vm.provision "file", source: ".\\kubeadm\\01-netcfg.yaml", destination: "/home/vagrant/" node.vm.provision "shell", inline: "sed 's/192.168.99.99/192.168.99.8#{i}/' /home/vagrant/01-netcfg.yaml > /tmp/01-netcfg.yaml" node.vm.provision "shell", inline: "sudo mv -f /tmp/01-netcfg.yaml /etc/netplan/ -v" node.vm.provision "shell", inline: "sudo netplan apply" # add windows 10 friendly ssh pub key node.vm.provision "file", source: ".\\.ssh\\id_ed25519.pub", destination: "/home/vagrant/id_ed25519.pub" node.vm.provision "shell", inline: <<-SHELL cat /home/vagrant/id_ed25519.pub >> /home/vagrant/.ssh/authorized_keys SHELL # install applications node.vm.provision "Running Worker#{i}", type: "shell", :path => "kubeadm/install.sh" # restart vm node.vm.provision :reload # disable swap node.vm.provision "shell", inline: "sudo swapoff -a", run: "always" # Join worker node node.vm.provision "Join worker node ", type: "shell", :path => ".tmp/joincluster.sh" end end end