k8s-vagrant-dev/Vagrantfile
2023-06-11 18:49:38 +02:00

127 lines
5.2 KiB
Ruby

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