If you are looking to dive into the Kubernetes world, learning how to install Kubernetes is equally important.
Kubernetes is more than just management of containers as it keeps the load balanced between the cluster nodes, provides a self-healing mechanism, zero downtime deployment capabilities, automatic rollback, and many more features.
Let’s dive into this tutorial and learn how to install Kubernetes on ubuntu 20.04.
Table of Content
- Prerequisites
- Setup Prerequisites for Kubernetes installation on ubuntu 18.04 machine
- Installing Kubernetes on the Master and Worker Nodes
- Initialize Kubernetes cluster
- Install a Pod network on the cluster
- Conclusion
Prerequisites
- Two Ubuntu machines, one for Kubernetes Master and the other for Kubernetes enslaved person or worker node.
- On both the Linux machines, make sure Inbound and outbound rules are all open to the world as this is the demonstration.
In the production environment for the control Panel and worker node needs following ports to be open: Master 6443,10250/10251/10252 2379,2380 [All Inbound] and for worker node 30000-32767
- Docker is installed on both the Ubuntu machines. To check if docker is running, use the below command.
You may incur a small charge for creating an EC2 instance on Amazon Managed Web Service.
service docker status

Setup Prerequisites for Kubernetes installation on ubuntu 18.04 machine
Before installing Kubernetes on Ubuntu, you should first run through a few prerequisite tasks to ensure the installation goes smoothly.
To get started, open your favorite SSH client, connect to MASTER and Worker node and follow along.
- Install transport-https and curl package using apt-get install the command. Transport-https package allows the use of repositories accessed via the HTTP Secure protocol, and curl allows you to transfer data to or from a server or download, etc.
sudo apt-get update && sudo apt-get install -y apt-transport-https curl

- Add the GPG key for the official Kubernetes repository to your system using
curl
command.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
- Add the Kubernetes repository to APT sources and update the system.
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
You can also use sudo apt-add-repository “deb http://apt.kubernetes.io/ kubernetes-xenial main” command to add the kubernetes repository
- Finally, rerun the sudo apt update command to read the new package repository list and ensure all of the latest packages are available for installation.
Installing Kubernetes on the Master and Worker Nodes
Now that you have the prerequisite packages installed on both MASTER and WORKER, it’s time to set up Kubernetes. Kubernetes consists of three packages/tools, kubeadm, kubelet, and kubectl. Each of these packages contains all of the binaries and configurations necessary to set up a Kubernetes cluster.
Assuming you are still connected to the MASTER and Worker node via SSH:
- Now Install Kubectl ( which manages cluster), kubeadm (which starts cluster), and kubelet ( which manages Pods and containers) on both the machines.
sudo apt-get install -y kubelet kubeadm kubectl

If you don’t specify the runtime, then kubeadm automatically detects an installed container. For Docker runtime the Path to Unix socket is
/var/run/docker.sock
& for containerd it’srun/containerd/containerd.sock
Initialize Kubernetes cluster
Now that you have Kubernetes installed on your controller node and worker node. But unless you initialize it, it is doing nothing. Kubernetes is initialized on the controller node; let’s do it.
- Initialize your Cluster using Kubeadm init command on the Controller node, i.e., the control panel node.
The below command tells Kubernetes the IP address where its kube-apiserver is located with the --apiserver-advertise-address
parameter. In this case, that IP address is the controller node itself.
The command below also defines the range of IP addresses to use for the pod network using the -pod-network-cidr
parameter. The pod network allows pods to communicate with each other. Setting the pod network like this will automatically instruct the controller node to assign IP addresses for every node.
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.111.4.79

- Once your controller node that is the control panel is started is initialized, run the below commands on Controller Node to run the Kubernetes cluster with a regular user.
# Run the below commands on Master Node to run Kubernetes cluster with a regular user
# Creating a directory that will hold configurations such as the admin key files, which are required to connect to the cluster, and the cluster’s API address.
mkdir -p $HOME/.kube
# Copy all the admin configurations into the newly created directory
sudo cp -i /etc/Kubernetes/admin.conf $HOME/.kube/config
# Change the user from root to regular user that is non-root account
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Now, SSH into the worker node and run the
kubeadm join
command as shown above in initializing step.
kubeadm join I0.111.4.79:6443 --token: zxicp.......................................
- After running the command, the worker node joins the control panel successfully.

- Now, verify the nodes on your controller node by running the
kubectl
command as below.
kubectl get nodes

- You will notice that the status of both the nodes is NotReady because there is no networking configured between both the nodes. To check the network connectivity, run the kubectl command as shown below.
kubectl get pods --all-namespaces
- Below, you can see that
coredns pod
is in Pending, which configures network connecting between both the nodes. To configure the networking, they must be in Running status.

To fix the networking issue, you will need to Install a Pod network on the cluster so that your Pods can talk to each other. Let’s do that !!
Install a Pod network on the cluster
Earlier, you installed Kubernetes on the Controller node, and the worker node was able to join it, but to establish the network connectivity between two nodes, you need to deploy a pod network on the Controller node, and one of the most widely used pod networks is Flannel. Let’s deploy it with the kubectl apply command.
Kubernetes allows you to set up pod networks via YAML configuration files. One of the most popular pod networks is called Flannel. Flannel is responsible for allocating an IP address lease to each node.
The Flannel YAML file contains the configuration necessary for setting up the pod network.
- Run the below kubectl apply command on the Controller node.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- After running this command, you will see the below output.
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
- Now re-run kubectl commands to verify if both the nodes are in ready status and the coredns pod is running.
kubectl get nodes
kubectl get pods --all-namespaces

- To check the cluster status, run the kubectl cluster-info command.

Conclusion
You should now know how to install Kubernetes on Ubuntu. Throughout this tutorial, you walked through each step to get a Kubernetes cluster set up and deploy your first application. Good job!
Now that you have a Kubernetes cluster set up, what applications will you deploy next to it?