Created
October 3, 2023 01:21
-
-
Save TheFlash2k/87a58a53f0cf794f20573f15e40c842d to your computer and use it in GitHub Desktop.
This is used to automate the deployment of 2-Node/1-Master Kubernetes Configuration. The `deploy.sh` and `master-setup.sh` are attached as well, but to create a single script, they were base64 encoded and then included in the same script. In case of vagrant deployment, the user may only need to run `setup-kube-cluster.sh` (but the VMs must be up…
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
#!/bin/bash | |
## Author: @TheFlash2k | |
set -e | |
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf | |
overlay | |
br_netfilter | |
EOF | |
sudo modprobe overlay | |
sudo modprobe br_netfilter | |
# sysctl params required by setup, params persist across reboots | |
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf | |
net.bridge.bridge-nf-call-iptables = 1 | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
net.ipv4.ip_forward = 1 | |
EOF | |
# Apply sysctl params without reboot | |
sudo sysctl --system | |
lsmod | grep br_netfilter | |
lsmod | grep overlay | |
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward | |
# Add Docker's official GPG key: | |
sudo apt-get update | |
sudo apt-get install ca-certificates curl gnupg | |
sudo install -m 0755 -d /etc/apt/keyrings | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
sudo chmod a+r /etc/apt/keyrings/docker.gpg | |
# Add the repository to Apt sources: | |
echo \ | |
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ | |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
sudo apt-get update | |
sudo apt-get install containerd.io | |
echo '' | sudo tee /etc/containerd/config.toml | |
echo '''[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] | |
SystemdCgroup = true''' > /etc/containerd/config.toml | |
sudo systemctl restart containerd | |
sudo apt-get update | |
# apt-transport-https may be a dummy package; if so, you can skip that package | |
sudo apt-get install -y apt-transport-https ca-certificates curl | |
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg | |
# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list | |
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list | |
sudo apt-get update | |
sudo apt-get install -y kubelet kubeadm kubectl | |
sudo apt-mark hold kubelet kubeadm kubectl |
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
#!/bin/bash | |
set -e | |
## Only run this on the Master Node: | |
interface=enp0s8 | |
pod_cidr="10.244.0.0/16" | |
weave_net_name="weave-net" # By default its weave-net but is prone to change | |
namespace="kube-system" | |
output_log_file="/tmp/kubeadm.log" | |
## Extracting the IP | |
ip=`ip a s | grep $interface | grep inet | cut -d ' ' -f 6 | cut -d '/' -f 1` | |
sudo kubeadm config images pull | |
sudo kubeadm init --pod-network-cidr=$pod_cidr --apiserver-advertise-address=$ip | tee $output_log_file | |
mkdir -p $HOME/.kube | |
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | |
sudo chown $(id -u):$(id -g) $HOME/.kube/config | |
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml | |
echo -e "[PLEASE NOTE] You will have to modify the IPALLOC_RANGE Environment variable inside the weave daemonset.\nThe environment variable must be like this:\n- name: IPALLOC_RANGE\n value: $pod_cidr" | |
read -p "Press any key to enter into the editor." _ | |
kubectl edit ds $weave_net_name -n $namespace | |
join_cmd=`grep -A1 'kubeadm join' $output_log_file` | |
echo -e "[*] Networking setup done.\nPlease run the following command on the nodes to join them:\n$join_cmd" |
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
#!/bin/bash | |
## Author: @TheFlash2k | |
set -e | |
# The name of the master node: | |
master_node=kubemaster | |
############# Can also be used? ################## | |
#### But this solution requires extra files ###### | |
#### But is more readable?? IDK, look at it ###### | |
## Path to the deploy.sh | |
# deploy_script_file="./deploy.sh" | |
# deploy_script=`base64 -w0 $deploy_script_file` | |
## Path to master-setup.sh | |
# master_script_file="./master-setup.sh" | |
# master_script=`base64 -w0 $master_script_file` | |
################################################## | |
## Inside the master_node | |
output_log_file="/tmp/kubeadm.log" | |
setup_file="/tmp/setup.sh" | |
echo "[*] Master Node set as: $master_node" | |
deploy_script="fCBzdWRvIGdwZyAtLWRlYXJtb3IgLW8gL2V0Yy9hcHQva2V5cmluZ3MvZG9ja2VyLmdwZwpzdWRvIGNobW9kIGErciAvZXRjL2FwdC9rZXlyaW5ncy9kb2NrZXIuZ3BnCgojIEFkZCB0aGUgcmVwb3NpdG9yeSB0byBBcHQgc291cmNlczoKZWNobyBcCiAgImRlYiBbYXJjaD0iJChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSIgc2lnbmVkLWJ5PS9ldGMvYXB0L2tleXJpbmdzL2RvY2tlci5ncGddIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgXAogICIkKC4gL2V0Yy9vcy1yZWxlYXNlICYmIGVjaG8gIiRWRVJTSU9OX0NPREVOQU1FIikiIHN0YWJsZSIgfCBcCiAgc3VkbyB0ZWUgL2V0Yy9hcHQvc291cmNlcy5saXN0LmQvZG9ja2VyLmxpc3QgPiAvZGV2L251bGwKc3VkbyBhcHQtZ2V0IHVwZGF0ZQoKc3VkbyBhcHQtZ2V0IGluc3RhbGwgY29udGFpbmVyZC5pbwoKZWNobyAnJyB8IHN1ZG8gdGVlIC9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbAoKZWNobyAnJydbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lcy5ydW5jXQogIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzLnJ1bmMub3B0aW9uc10KICAgIFN5c3RlbWRDZ3JvdXAgPSB0cnVlJycnID4gL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sCgpzdWRvIHN5c3RlbWN0bCByZXN0YXJ0IGNvbnRhaW5lcmQKCnN1ZG8gYXB0LWdldCB1cGRhdGUKIyBhcHQtdHJhbnNwb3J0LWh0dHBzIG1heSBiZSBhIGR1bW15IHBhY2thZ2U7IGlmIHNvLCB5b3UgY2FuIHNraXAgdGhhdCBwYWNrYWdlCnN1ZG8gYXB0LWdldCBpbnN0YWxsIC15IGFwdC10cmFuc3BvcnQtaHR0cHMgY2EtY2VydGlmaWNhdGVzIGN1cmwKY3VybCAtZnNTTCBodHRwczovL3BrZ3MuazhzLmlvL2NvcmU6L3N0YWJsZTovdjEuMjgvZGViL1JlbGVhc2Uua2V5IHwgc3VkbyBncGcgLS1kZWFybW9yIC1vIC9ldGMvYXB0L2tleXJpbmdzL2t1YmVybmV0ZXMtYXB0LWtleXJpbmcuZ3BnCiMgVGhpcyBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9uIGluIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2t1YmVybmV0ZXMubGlzdAplY2hvICdkZWIgW3NpZ25lZC1ieT0vZXRjL2FwdC9rZXlyaW5ncy9rdWJlcm5ldGVzLWFwdC1rZXlyaW5nLmdwZ10gaHR0cHM6Ly9wa2dzLms4cy5pby9jb3JlOi9zdGFibGU6L3YxLjI4L2RlYi8gLycgfCBzdWRvIHRlZSAvZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC9rdWJlcm5ldGVzLmxpc3QKc3VkbyBhcHQtZ2V0IHVwZGF0ZQpzdWRvIGFwdC1nZXQgaW5zdGFsbCAteSBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bApzdWRvIGFwdC1tYXJrIGhvbGQga3ViZWxldCBrdWJlYWRtIGt1YmVjdGw=" | |
master_script="IyEvYmluL2Jhc2gKCnNldCAtZQoKIyMgT25seSBydW4gdGhpcyBvbiB0aGUgTWFzdGVyIE5vZGU6CmludGVyZmFjZT1lbnAwczgKcG9kX2NpZHI9IjEwLjI0NC4wLjAvMTYiCndlYXZlX25ldF9uYW1lPSJ3ZWF2ZS1uZXQiICMgQnkgZGVmYXVsdCBpdHMgd2VhdmUtbmV0IGJ1dCBpcyBwcm9uZSB0byBjaGFuZ2UKbmFtZXNwYWNlPSJrdWJlLXN5c3RlbSIKb3V0cHV0X2xvZ19maWxlPSIvdG1wL2t1YmVhZG0ubG9nIgoKIyMgRXh0cmFjdGluZyB0aGUgSVAKaXA9YGlwIGEgcyB8IGdyZXAgJGludGVyZmFjZSB8IGdyZXAgaW5ldCB8IGN1dCAtZCAnICcgLWYgNiB8IGN1dCAtZCAnLycgLWYgMWAKCnN1ZG8ga3ViZWFkbSBjb25maWcgaW1hZ2VzIHB1bGwKc3VkbyBrdWJlYWRtIGluaXQgLS1wb2QtbmV0d29yay1jaWRyPSRwb2RfY2lkciAtLWFwaXNlcnZlci1hZHZlcnRpc2UtYWRkcmVzcz0kaXAgfCB0ZWUgJG91dHB1dF9sb2dfZmlsZQoKbWtkaXIgLXAgJEhPTUUvLmt1YmUKc3VkbyBjcCAtaSAvZXRjL2t1YmVybmV0ZXMvYWRtaW4uY29uZiAkSE9NRS8ua3ViZS9jb25maWcKc3VkbyBjaG93biAkKGlkIC11KTokKGlkIC1nKSAkSE9NRS8ua3ViZS9jb25maWcKCmt1YmVjdGwgYXBwbHkgLWYgaHR0cHM6Ly9naXRodWIuY29tL3dlYXZld29ya3Mvd2VhdmUvcmVsZWFzZXMvZG93bmxvYWQvdjIuOC4xL3dlYXZlLWRhZW1vbnNldC1rOHMueWFtbAoKZWNobyAtZSAiW1BMRUFTRSBOT1RFXSBZb3Ugd2lsbCBoYXZlIHRvIG1vZGlmeSB0aGUgSVBBTExPQ19SQU5HRSBFbnZpcm9ubWVudCB2YXJpYWJsZSBpbnNpZGUgdGhlIHdlYXZlIGRhZW1vbnNldC5cblRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGJlIGxpa2UgdGhpczpcbi0gbmFtZTogSVBBTExPQ19SQU5HRVxuICB2YWx1ZTogJHBvZF9jaWRyIgoKcmVhZCAtcCAiUHJlc3MgYW55IGtleSB0byBlbnRlciBpbnRvIHRoZSBlZGl0b3IuIiBfCgprdWJlY3RsIGVkaXQgZHMgJHdlYXZlX25ldF9uYW1lIC1uICRuYW1lc3BhY2UKam9pbl9jbWQ9YGdyZXAgLUExICdrdWJlYWRtIGpvaW4nICRvdXRwdXRfbG9nX2ZpbGVgCmVjaG8gLWUgIlsqXSBOZXR3b3JraW5nIHNldHVwIGRvbmUuXG5QbGVhc2UgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBvbiB0aGUgbm9kZXMgdG8gam9pbiB0aGVtOlxuJGpvaW5fY21kIg==" | |
## Finding the machines and the ports they're running on. | |
inter=`vagrant status | grep running | cut -d ' ' -f 1 | tr $'\n' ','` | |
IFS=',' read -r -a machines <<< "$inter" | |
inter=`vagrant ssh-config | grep Port | cut -d ' ' -f 4 | tr $'\n' ','` | |
IFS=',' read -r -a ports <<< "$inter" | |
unset inter | |
echo -e "[*] Following machines are deployed:\n$machines" | |
for machine in "${machines[@]}"; do | |
echo "[*] Setting up on $machine:" | |
vagrant ssh $machine -c "(echo $deploy_script | base64 -d) > $setup_file && chmod +x $setup_file && $setup_file" | |
done | |
echo "Setting up the master node:" | |
vagrant ssh $master_node -c "(echo $master_script | base64 -d) > $setup_file && chmod +x $setup_file && $setup_file" | |
echo -n "Extracting the join command to be run on the worker nodes" | |
join_cmd=`vagrant ssh $master_node -c "cat $output_log_file | tail -2"` | |
echo ": $join_cmd" | |
for machine in "${machines[@]}"; do | |
if [[ $machine != $master_node ]]; then | |
echo "Joining $machine to $master_node" | |
vagrant ssh $machine -c "$join_cmd" | |
fi | |
echo "Removing $setup_file from $machine:" | |
vagrant ssh $machine -c "rm $setup_file" | |
done | |
echo "[+] Done!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment