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)
- Install Docker
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 🙂