Install a Master Kubernetes Cluster on Centos 8

Hardware Requirements MASTER/NODE

egrep --color 'vmx|svm' /proc/cpuinfo

Must have VMX or SVM processor flag that enables virtualisation.

vmstat -s | grep total

280000 K – must be more than

cat /proc/cpuinfo | grep cores | wc -l

must be 2+

If you are using VM for this task, it might not work due to a nested virtualisation limitation or poor performance. You can try on windows 10 with Hyper-V with Intel Processor(AMD does not work in windows10). Virtual-box offers nested virtualisation functionality on Linux with AMD processor. Recommended is to have a separate machine for Kubernetes.

Master/Node pre-installation

If you can, it is good to set up DNS connecting IP’s ait domain names.

hostnamectl set-hostname node1.domain.com
nano /etc/sysconfig/network
 HOSTNAME=myserver.domain.com
vi /etc/sysconfig/network-scripts/ifcfg-enp2s0
#set static IP

systemctl restart NetworkManager.service
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
modprobe br_netfilter
echo "net.bridge.bridge-nf-call-ip6tables = 1">> /etc/sysctl.d/01-custom.conf
echo "net.bridge.bridge-nf-call-iptables = 1">> /etc/sysctl.d/01-custom.conf
echo "net.bridge.bridge-nf-call-arptables = 1" >> /etc/sysctl.d/01-custom.conf
sysctl -p /etc/sysctl.d/01-custom.conf
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce-3:18.09.1-3.el7
dnf install -y yum-utils device-mapper-persistent-data lvm2
 
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl daemon-reload
 

systemctl restart docker && systemctl enable docker 

dnf -y update --nobest && yum -y upgrade --nobest

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



dnf install iproute-tc kubeadm kubelet kubectl kubernetes-cni -y 


systemctl enable --now kubelet

swapoff -a 
sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

systemctl restart kubelet && systemctl enable kubelet 

If the firewall is set up (default not; install if needed; reboot):

dnf install -y firewalld
systemctl  restart firewalld && systemctl enable firewalld
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
 firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

Master: Initialize the Kubernetes Cluster:

kubeadm init --pod-network-cidr 192.168.0.0/16 --service-cidr 10.96.0.0/12 --service-dns-domain "k8s" --apiserver-advertise-address192.168.0.0

Save a join command for later from the output of init command.

As a normal user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc

You should install at least one network provider on master :

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

Read a full list of network providers from the resource section.

Master: Setup the Kubernetes Config:

As a normal user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc

Nodes: Setup and connect:

Make the same preparations as in Master/Node pre-installation on each node to be connected. To connect a node to a master make commands as root on nodes:

kubeadm join 192.192.192.192:6443 --token ma53bs.fp0uwi2gc9p9efki \
    --discovery-token-ca-cert-hash sha256:e756d6706e02f45dc1fa5d6254989d86612ed67aa0f6cd2fc2a2fe5462106vfc

Master: Deploy a POD Network to the Cluster:

As a normal user, deploy a [pod network]:

kubectl apply -f http://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

Master: Install MINIKUBE:

cat <<EOF > /etc/yum.repos.d/virtualbox.repo
[virtualbox]
name=Oracle Linux / RHEL / CentOS-7 / x86_64 - VirtualBox
baseurl=https://download.virtualbox.org/virtualbox/rpm/rhel/7/x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
EOF
yum update -y
yum install VirtualBox-6.0
virtualbox --version

If you got messages about not installed module, you need to build a driver by doing :

yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
reboot
/usr/lib/virtualbox/vboxdrv.sh setup
virtualbox --version

Then install minicube with commands below:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
install minikube /usr/local/bin
minikube start

Resources:

) | grep 'inet '| awk '{print $2}') 

Save a join command for later from the output of init command.

As a normal user:


You should install at least one network provider on master :


Read a full list of network providers from the resource section.

Master: Setup the Kubernetes Config:

As a normal user:


Nodes: Setup and connect:

Make the same preparations as in Master/Node pre-installation on each node to be connected. To connect a node to a master make commands as root on nodes:


Master: Deploy a POD Network to the Cluster:

As a normal user, deploy a [pod network]:


Master: Install MINIKUBE:


If you got messages about not installed module, you need to build a driver by doing :


Then install minicube with commands below:


Resources:

Leave a comment