Last active
September 26, 2019 21:32
-
-
Save kenanhancer/18f461398e4db424554ba426f25786dd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
servers = [ | |
{ | |
:name => "k8s-master-node", | |
:type => "master", | |
:box => "ubuntu/xenial64", | |
:box_version => "20180831.0.0", | |
:eth1 => "192.168.205.10", | |
:port_forward => "8001", | |
:mem => "2048", | |
:cpu => "2" | |
}, | |
{ | |
:name => "k8s-worker-node-1", | |
:type => "node", | |
:box => "ubuntu/xenial64", | |
:box_version => "20180831.0.0", | |
:eth1 => "192.168.205.11", | |
:port_forward => "", | |
:mem => "2048", | |
:cpu => "2" | |
}, | |
{ | |
:name => "k8s-worker-node-2", | |
:type => "node", | |
:box => "ubuntu/xenial64", | |
:box_version => "20180831.0.0", | |
:eth1 => "192.168.205.12", | |
:port_forward => "", | |
:mem => "2048", | |
:cpu => "2" | |
} | |
] | |
dockerScript = %{ | |
apt-get update && apt-get install -y apt-transport-https ca-certificates curl software-properties-common | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - | |
add-apt-repository \ | |
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ | |
$(lsb_release -cs) \ | |
stable" | |
apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 18.09 | head -1 | awk '{print $3}') | |
# run docker commands as vagrant user (sudo not required) | |
usermod -aG docker vagrant | |
} | |
kubeadm_kubelet_kubectl_Script = %{ | |
apt-get update && apt-get install -y apt-transport-https curl | |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - | |
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list | |
deb https://apt.kubernetes.io/ kubernetes-xenial main | |
EOF | |
apt-get update | |
apt-get install -y kubelet kubeadm kubectl | |
apt-mark hold kubelet kubeadm kubectl | |
} | |
$configureBox = <<-SCRIPT | |
#{dockerScript} | |
#{kubeadm_kubelet_kubectl_Script} | |
SCRIPT | |
$configureMaster = <<-SCRIPT | |
echo "This is master" | |
# ip of this box | |
IP_ADDR=`ifconfig enp0s8 | grep Mask | awk '{print $2}'| cut -f2 -d:` | |
# install k8s master | |
HOST_NAME=$(hostname -s) | |
kubeadm init --apiserver-advertise-address=$IP_ADDR --apiserver-cert-extra-sans=$IP_ADDR --node-name $HOST_NAME | |
#copying credentials to regular user - vagrant | |
sudo --user=vagrant mkdir -p /home/vagrant/.kube | |
cp -i /etc/kubernetes/admin.conf /home/vagrant/.kube/config | |
chown $(id -u vagrant):$(id -g vagrant) /home/vagrant/.kube/config | |
# install Calico pod network addon | |
export KUBECONFIG=/home/vagrant/.kube/config | |
# kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml | |
# kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml | |
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" | |
kubeadm token create --print-join-command --ttl 0 >> /etc/kubeadm_join_cmd.sh | |
chmod +x /etc/kubeadm_join_cmd.sh | |
# required for setting up password less ssh between guest VMs | |
sudo sed -i "/^[^#]*PasswordAuthentication[[:space:]]no/c\PasswordAuthentication yes" /etc/ssh/sshd_config | |
sudo service sshd restart | |
SCRIPT | |
$configureNode = <<-SCRIPT | |
echo "This is worker" | |
apt-get install -y sshpass | |
sshpass -p "vagrant" scp -o StrictHostKeyChecking=no [email protected]:/etc/kubeadm_join_cmd.sh . | |
sh ./kubeadm_join_cmd.sh | |
SCRIPT | |
Vagrant.configure("2") do |config| | |
servers.each do |opts| | |
config.vm.define opts[:name] do |node| | |
node.vm.box = opts[:box] | |
node.vm.box_version = opts[:box_version] | |
node.vm.hostname = opts[:name] | |
node.vm.network :private_network, ip: opts[:eth1] | |
if opts[:port_forward] != "" | |
node.vm.network "forwarded_port", guest: opts[:port_forward], host: opts[:port_forward] | |
end | |
node.vm.provider "virtualbox" do |v| | |
v.name = opts[:name] | |
v.customize ["modifyvm", :id, "--groups", "/Kenan Hancer"] | |
v.customize ["modifyvm", :id, "--memory", opts[:mem]] | |
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] | |
end | |
node.vm.provision "shell", inline: $configureBox | |
if opts[:type] == "master" | |
node.vm.provision "shell", inline: $configureMaster | |
else | |
node.vm.provision "shell", inline: $configureNode | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment