This is a short tutorial on how to install, configure and start your own Kubernetes cluster.
Set Hostname and update hosts file
Use hostnamectl command to set the hostname on control node and workers node.
Run beneath command on control node
sudo hostnamectl set-hostname "k8master"
exec bash
Execute following command on worker node1
sudo hostnamectl set-hostname "k8worker1"
exec bash
Execute following command on worker node2
sudo hostnamectl set-hostname "k8worker2"
exec bash
Add the following entries in /etc/hosts file on control and worker nodes respectively.
192.168.202.80 k8master
192.168.202.81 k8worker1
192.168.202.82 k8worker2
Disable Swap and Set SELinux in permissive mode
Disable swap, so that kubelet can work properly. Run below commands on all the nodes to disable it
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Run beneath sed command on all the nodes to set SELinux in permissive mode
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Configure Firewall Rules on Master and Worker Nodes
On control plane, following ports must be allowed in firewall.
Control-Plane-Firewall-Ports
To allow above ports in control plane, run
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10251/tcp
sudo firewall-cmd --permanent --add-port=10252/tcp
sudo firewall-cmd --reload
sudo modprobe br_netfilter
sudo sh -c "echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables"
sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"
On worker Nodes, following ports must be allowed in firewall
Worker-Nodes-firewall-Ports
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload
sudo modprobe br_netfilter
sudo sh -c "echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables"
sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"
First, create a modules configuration file for Kubernetes.
Add these lines and save the changes
sudo cat << EOF > /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
Then load both modules using the modprobe command.
sudo modprobe overlay
sudo modprobe br_netfilter
Next, configure the required sysctl parameters as follows
sudo cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
Install CRI-O
To install CRI-O, set the $VERSION environment variable to match your CRI-O version. For instance, to install CRI-O version 1.21 set the $VERSION as shown:
export VERSION=1.21
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
sudo dnf install cri-o -y
sudo systemctl enable cri-o
sudo systemctl start cri-o
Install Kubernetes
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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
exclude=kubelet kubeadm kubectl
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
Init the cluster
sudo kubeadm init
OPTIONAL: install Calico
Join worker nodes
sudo kubeadm join 192.168.202.80:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
Prepare the user environment
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config






