Skip to content

Instantly share code, notes, and snippets.

@EresDev
Last active February 12, 2021 14:13
Show Gist options
  • Save EresDev/a78ab0d8d7d5f65fade3cab5389cf513 to your computer and use it in GitHub Desktop.
Save EresDev/a78ab0d8d7d5f65fade3cab5389cf513 to your computer and use it in GitHub Desktop.
Setup a multinode cluster of kubernetes on Ubuntu 16.04

Install Kubernetes Cluster using kubeadm

I used VirtualBox image of Ubuntu 16.04.6 Xenial from OSBoxes

Assumptions

Role FQDN IP OS RAM CPU
Master kmaster.example.com 192.168.56.2 Ubuntu 16.04.6 2G 2
Worker kworker.example.com 192.168.56.3 Ubuntu 16.04.6 1G 1
Worker kworker.example.com 192.168.56.4 Ubuntu 16.04.6 1G 1

You can use virualbox Host only network to set these IP. Then update the followings:

/etc/hostname
/etc/hosts
/etc/network/interfaces #to give static IP from new Hostonly network 

On both Kmaster and Kworker

Perform all the commands as root user unless otherwise specified

Disable Firewall
ufw disable
Disable swap
swapoff -a; sed -i '/swap/d' /etc/fstab
Update sysctl settings for Kubernetes networking
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Install docker engine
{
  apt install -y apt-transport-https ca-certificates curl gnupg-agent 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 update
  apt install -y docker-ce=5:19.03.10~3-0~ubuntu-xenial containerd.io
}

Kubernetes Setup

Add Apt repository
{
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
Install Kubernetes components
apt update && apt install -y kubeadm=1.18.5-00 kubelet=1.18.5-00 kubectl=1.18.5-00

On kmaster

Initialize Kubernetes Cluster

Update the below command with the ip address of kmaster

kubeadm init --apiserver-advertise-address=172.16.16.100 --pod-network-cidr=192.168.0.0/16  --ignore-preflight-errors=all
Deploy Calico network
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
Cluster join command
kubeadm token create --print-join-command
To be able to run kubectl commands as non-root user

If you want to be able to run kubectl commands as non-root user, then as a non-root user perform these

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

On Kworker

Join the cluster

Use the output from kubeadm token create command in previous step from the master server and run here.

Verifying the cluster

Get Nodes status
kubectl get nodes
Get component status
kubectl get cs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment