127 lines
5.2 KiB
Ruby
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 |