ansible

Installing Kubernetes on CentOS

Part of my job is to talk about the latest geeky technologies and many times I also have to demonstrate the same – Kind of “Show me” discussions.

When I started working on getting my hands dirty on Kubernetes (aka K8S) I faced many issues to get started. Now I am at the level where deploying K8S isn’t a big deal at all. The reason I am writing this blog is that often more than not I always get into discussions where someone is just starting with the K8S journey and has the same queries and questions which I also had. Hopefully, this summary will help people to get started with K8S.

Before I get started it’s important to understand the K8S lingo 🙂 This will help understand the implementation steps. Also, note that the purpose of this page is not to re-iterate the K8S components and architecture. It’s purely intended to list the steps o have hassle-free K8S deployment

Make sure that the VMware template which will be used has Ansible master server SSH keys added before you convert the VM image to the template. I have already documented this process of enabling SSH-based authentication in this blog

Part 1 – Dependencies

Below are the list of dependencies which needs to be installed on all the K8S nodes (master and worker)

  • Disable SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • Turnoff swap (also remove swap entry from /etc/fstab)
swapoff -a
yum -y install docker
systemctl enable docker
systemctl start docker
systemctl status docker
  • Ensure net.bridge.bridge-nf-call-ip6tables is set to 1
  • Ensure net.bridge.bridge-nf-call-iptables is set to 1
sudo bash -c 'cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF'
  • Add Kubernetes YUM repository
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
  • Install kubelet (I installed version 1.14)
  • install kubeadm (I installed version 1.14)
  • Start kubelet service
yum -y install kubelet kubeadm

Below listed dependencies are only for K8S master

  • Install kubectl
yum -y install kubectl
kubectl version

Part 2 – Kubernetes Master

Below listed steps are for configuring K8S Master

  • Initialize the cluster using below command
kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
  • Create ~/.kube directory (chmod 0755)
  • Copy admin.conf to user’s kube config
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  • Install Pod network. In my case I have used Flannel, but you can choose relevant cluster networking from certified options from this link.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt

At this moment your K8S master is installed and configured. Next step is to configure worker nodes and add them into the K8S cluster

Part 3 – Kubernetes Worker

Final part is to have worker nodes configured and add them in K8S cluster. This steps involves running commands on Master and Worker nodes.

  • Master node – For adding worker nodes into the K8S cluster we first need to get the join command from the master server. Run the below command on Master server
kubeadm token create --print-join-command
  • Note/copy the join command output. We need to run this join command on all worker nodes.

Finally run below command on the K8S Master. If everything was successful then you should see list of all the nodes (Master and Worker) of your K8S cluster.

kubectl get nodes

This concludes K8S installation and configuration 🙂

2 replies »

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s