This is the second post in a two part series about making K8s Clusters quicker and simpler to deploy, the first part focussed on deploying on a Mac using Multipass, but actually I’ve used loads of different mechanisms to deploy the hosting container VM’s, which then kick off this script. I’ve probably post them at some point too.
There’s another part of this where I used a watch file to wait for the master node to be built, export the cluster joining hash, which completely automates the master & worker node deployment.
Master Node
#! /bin/bash
sudo apt update
sudo apt -y upgrade
sudo apt -y install curl apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt -y install vim git wget kubelet kubeadm kubectl curl gnupg2 software-properties-common apt-transport-https ca-certificates
sudo apt-mark hold kubelet kubeadm kubectl
sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab
sudo swapoff -a
# Enable kernel modules
sudo modprobe overlay
sudo modprobe br_netfilter
# Add some settings to sysctl
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# Reload sysctl
sudo sysctl –system
# old sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
sudo apt update
sudo apt install -y containerd.io docker-ce docker-ce-cli
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/docker/daemon.json <<EOF
{
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
sudo systemctl enable kubelet
sudo kubeadm init \
–pod-network-cidr=172.16.0.0/16 > ./”k8s_output.txt”
rm /mnt/synserver/Lab/Scripts/Kuberbetes/Logs/k8s-cp-install_log_latest.txt && tail -2 ./k8s_output.txt >> /mnt/synserver/Lab/Scripts/Kuberbetes/Logs/k8s-cp-install_log_latest.txt
cp /mnt/synserver/Lab/Scripts/Kuberbetes/Logs/”k8s-cp-install_log_latest.txt” /mnt/synserver/Lab/Scripts/Kuberbetes/Logs/”k8s-cp-install_log_$(date +”%Y_%m_%d_%I_%M”).txt”
mkdir -p $HOME/.kube
sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
kubectl get pods –all-namespaces
Worker Nodes
#! /bin/bash
sudo apt update
sudo apt -y upgrade
sudo apt -y install curl apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt -y install vim git wget kubelet kubeadm kubectl curl gnupg2 software-properties-common apt-transport-https ca-certificates
sudo apt-mark hold kubelet kubeadm kubectl
sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab
sudo swapoff -a
# Enable kernel modules
sudo modprobe overlay
sudo modprobe br_netfilter
# Add some settings to sysctl
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# Reload sysctl
sudo sysctl –system
# old sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
sudo apt update
sudo apt install -y containerd.io docker-ce docker-ce-cli
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/docker/daemon.json <<EOF
{
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
sudo systemctl enable kubelet
/mnt/synserver/Lab/Scripts/Kuberbetes/Logs/”k8s-cp-install_log_latest.txt”
Leave a comment