Kubernetes Docker Cluster On CentOS 7
Kubernetes Docker Cluster On CentOS 7
Kubernetes is an open source platform for managing containerized applications developed by Google. It allows you to
manage, scale, and automatically deploy your containerized applications in the clustered environment. With
Kubernetes, we can orchestrate our containers across multiple hosts, scale the containerized applications with all
resources on the fly, and have centralized container management environment.
In this tutorial, I will show you step-by-step how to install and configure Kubernetes on CentOS 7. We will be using 1
server 'k8s-master' as the Kubernetes Host Master, and 2 servers as Kubernetes node, 'node01' and 'node02'.
Prerequisites
3 CentOS 7 Servers
10.0.15.10 k8s-master
10.0.15.21 node01
10.0.15.22 node02
Root privileges
Note: Use IP addresses of your own network and you can go with a single node too as you have environmental
restrictions
Kubernetes Installation
Kubernetes Cluster Initialization
Adding node01 and node02 to the Cluster
Testing - Create First Pod
In this first step, we will prepare those 3 servers for Kubernetes installation, so run all commands on the master and
node servers.
We will prepare all servers for Kubernetes installation by changing the existing configuration on servers, and also
installating some packages, including docker-ce and kubernetes itself.
- Configure Hosts
vim /etc/hosts
10.0.15.10 k8s-master
10.0.15.21 node01
10.0.15.22 node02
- Disable SELinux
In this tutorial, we will not cover about SELinux configuration for Docker, so we will disable it.
Run the command below to disable SELinux.
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
The br_netfilter module is required for kubernetes installation. Enable this kernel module so that the packets
traversing the bridge are processed by iptables for filtering and for port forwarding, and the kubernetes pods across
the cluster can communicate with each other.
Run the command below to enable the br_netfilter kernel module.
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
Disable SWAP
swapoff -a
vim /etc/fstab
Add the docker repository to the system and install docker-ce using the yum command.
Install Kubernetes
Add the kubernetes repository to the centos 7 system by running the following command.
Now install the kubernetes packages kubeadm, kubelet, and kubectl using the yum command below.
sudo reboot
Log in again to the server and start the services, docker and kubelet.
We need to make sure the docker-ce and kubernetes are using same 'cgroup'.
Check docker cgroup using the docker info command.
systemctl daemon-reload
systemctl restart kubelet
Now we're ready to configure the Kubernetes Cluster.
Note:
--apiserver-advertise-address = determines which IP address Kubernetes should advertise its API server on.
--pod-network-cidr = specify the range of IP addresses for the pod network. We're using the 'flannel' virtual network. If
you want to use another pod network such as weave-net or calico, change the range IP address.
When the Kubernetes initialization is complete, you will get the result as below.
Note:
Copy the 'kubeadm join ... ... ...' command to your text editor. The command will be used to register new nodes to the
kubernetes cluster.
Now in order to use Kubernetes, we need to run some commands as on the result.
Create new '.kube' configuration directory and copy the configuration 'admin.conf'.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Next, deploy the flannel network to the kubernetes cluster using the kubectl command.
And you will get the 'k8s-master' node is running as a 'master' cluster with status 'ready', and you will get all pods that
are needed for the cluster, including the 'kube-flannel-ds' for network pod configuration.
Make sure all kube-system pods status is 'running'.
In this step, we will add node01 and node02 to join the 'k8s' cluster.
Connect to the node01 server and run the kubeadm join command as we copied on the top.
Connect to the node02 server and run the kubeadm join command as we copied on the top.
Wait for some minutes and back to the 'k8s-master' master cluster server check the nodes and pods using the
following command.
Now you will get node01 and node02 has been added to the cluster with status 'ready'.
node01 and node02 have been added to the kubernetes cluster.
In this step, we will do a test by deploying the Nginx pod to the kubernetes cluster. A pod is a group of one or more
containers with shared storage and network that runs under Kubernetes. A Pod contains one or more containers,
such as Docker container.
Login to the 'k8s-master' server and create new deployment named 'nginx' using the kubectl command.
To see details of the 'nginx' deployment sepcification, run the following command.
Now you will get the nginx pod is now running under cluster IP address '10.160.60.38' port 80, and the node main IP
address '10.0.15.x' on port '30691'.
From the 'k8s-master' server run the curl command below.
curl node01:30691
curl node02:30691
The Nginx Pod has now been deployed under the Kubernetes cluster and it's accessible via the internet.
Now access from the web browser.
http://10.0.15.10:30691/