Kubernetes lab bouwen

Nadat ik de cursus Kubernetes via de Linux Academy heb afgerond, ga ik natuurlijk ook weer mijn playground daar voor mijn nieuwe cursus gebruiken. Vandaar dat het wel handig is om een eigen Kube cluster te hebben op mijn laptop.
Het makkelijkst kunnen we dit doen op basis van VirtualBox. Dit werk om alle gangbare systemen. Wat we het beste kunnen doen is eerst 1 CentOS systeem maken deze zo ver mogelijk installeren en deze dan clonen. Dit werkt namelijk het snelst.
Download de CentOS iso, waarmee we de installatie kunnen doen.
Het stappen plan ziet er als volgt uit:
Maak een nieuwe VM aan in VitrualBox. Deze moet de volgende resources hebben:

  • 1 CPU
  • 1 GB geheugen
  • 1 Harddisk van 25 GB
  • 2 netwerkkaarten
    – 1e stellen we in als Bridge Adapter (Paravirtualized)
    – 2e stellen we in als Host Only Netwerk
  • 1 CD-rom drive welke we koppelen aan de CentOS iso

We voeren een standaard installatie uit van CentOS. En updaten de repository. Als de installatie gedaan is rebooten we het systeem en voeren de volgende stappen uit:

yum install vim
swapoff -a
vim /etc/fstab

In /etc/fstab commenten we de regel van de swap space.
We gaan verder met het installeren van Docker

yum -y install docker
systemctl enable docker
systemctl start docker

Als docker geïnstalleerd is maken we de kubernetes repository aan

cat << EOF | sudo tee /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

Om alles goed te laten werken moeten we SELinux uitschakelen

setenforce 0
vi /etc/selinux/config

In dit bestand veranderen we SELINUX=enforcing in SELINUX=permissive
Hierna kunnen we kubernetes installeren

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet

en configureren sysctl

cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

Nu is de basis installatie compleet. Deze installatie gaan we clonen. Zodat we 1 master en een aantal nodes hebben. Nadat we deze nodes gemaakt hebben starten we ze een voor een op en noteren het ip adres van de 2e kaarten.
We veranderen de hostnames de 1e server noemen we bijv. kubemaster.testnet.nl, de 1e worker kubeworker1.testnet.nl en de 2e worker kubeworker2.testnet.nl.
Op al deze nodes vullen we de ipadressen in in de /etc/hosts file. Zodat deze apparaten elkaar op naam kunnen bereiken.
Als we dit allemaal gedaan hebben loggen we in op de master node en voeren het volgende commando uit

kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Op het einde van de installatie krijgen we te zien hoe we de workernodes kunnen joinen. Kopieer deze regel. Mocht er een ip adres instaan van de masternode raad ik aan deze te veranderen in de hostname.

Voordat we de workernodes kunnen joinen voeren we op de masternode eerst nog het volgende commando uit, waarmee we de flanel networking installeren

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

Hierna kunnen we de workernodes joinen en kunnen we controleren of de nodes het doen door middel van het volgende commando:

kubectl get nodes