## Kubernetes installatie

### Benodigdheden

Ik raad aan om de Ubuntu 20.04 omgeving te gebruiken uit voorgaande lessen voor het doorlopen van deze les, hiermee kan je de lessen lokaal uitvoeren. Je hebt 1 master VM nodig en 2 worker VM's. Je kunt er ook voor kiezen om dit in de cloud uit te voeren en 3 virtuele machines te bestellen.

Aanbevolen

Zorg voor hostnamen die overeenkomen met de functie van de server. Bijvoorbeeld k8s-master, k8s-worker1, enz.

Achteraf of bij importeren kun je de hostname veranderen met de volgende opdracht

`sudo hostnamectl set-hostname new-computer-name-here`

Reboot na het aanpassen van de hostname.

### Installatie

(Installatie gebeurt voor de volgende onderdelen op alle 3 servers)

De hosts hebben een paar minuten nodig om op te starten, waarna je bij elk moet inloggen via `ssh`en begin met het installeren van dezelfde set pakketten voor Docker en Kubernetes. `containerd`is nu beschikbaar als alternatieve runtime, maar is iets meer werk om te configureren.

- Installeer Docker

Een bekende/geteste versie van Docker moet worden gebruikt met de `kubeadm`bootstrapper, anders zullen we mogelijk onbekend gedrag tegenkomen. De apt-pakketrepository bevat een voldoende oude versie voor ons.

    $ sudo apt-get update \
      && sudo apt-get install -qy docker.io

- Voeg de Kubernetes-pakketbron toe

Deze opdracht uit de Kubernetes-documentatie voegt de pakketrepository toe waar `kubeadm`, `kubectl`en de gerelateerde pakketten worden regelmatig gepubliceerd.

    $ sudo apt update \
      && sudo apt-get install -y apt-transport-https \
      && curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

- Voer een pakketupdate uit:

    $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" \
      | sudo tee -a /etc/apt/sources.list.d/kubernetes.list \
      && sudo apt-get update

Werk nu uw pakketlijst bij met `apt update`.

- Installeren `kubelet`, `kubeadm`en`kubernetes-cni`

Het `kubelet`is verantwoordelijk voor het plannen, beheren en draaien van containers op je hosts. `kubeadm`tool is een gebruiksgemak dat gereed is voor productie en dat wordt gebruikt om de verschillende componenten van een werkcluster te configureren. Het `kubernetes-cni`pakket vertegenwoordigt de netwerkcomponenten die niet rechtstreeks in Kubernetes zijn ingebouwd.

CNI staat voor Container Networking Interface, een specificatie die definieert hoe netwerkstuurprogramma's moeten communiceren met Kubernetes. CNI-netwerkstuurprocessen worden uitgevoerd met UNIX-pipes en worden voor elk verzoek forked​.

    sudo apt-get update \
      && sudo apt-get install -yq \
      kubelet \
      kubeadm \
      kubernetes-cni

We moeten de Kubernetes-pakketten in de wacht zetten, want als we dat niet doen, wanneer er een nieuwere versie wordt uitgebracht en we draaien `apt upgrade`, kunnen we eindigen met een onverwachte hobbel in onze Kubernetes-versie.

    sudo apt-mark hold kubelet kubeadm kubectl

- Swap moet zijn uitgeschakeld

De beheerders van Kubernetes besloten dat het gebruik van wisselgeheugen kan leiden tot onvoorspelbaar gedrag en gaven er de voorkeur aan om het uit te schakelen dan om te kampen met een van de bijwerkingen die kunnen optreden.

Je kunt controleren of je swap heeft ingeschakeld door in te typen `cat /proc/swaps`. Als je een wisselbestand of partitie hebt ingeschakeld, schakel deze dan uit met `swapoff`. U kunt dit permanent maken door het wisselbestand in `/etc/fstab`.

    cat /proc/swaps
    Filename                                Type            Size    Used    Priority
    /dev/md127                              partition       1995772 0       -2
    $ sudo swapoff /dev/md127

    $ sudo vim /etc/fstab

    UUID=2358eec8-dda6-4212-9cf6-92f515a1b631       /       ext4    errors=remount-ro       0       1
    #UUID=b038c1b7-fa7f-4f20-b554-6c2885d73ba5      none    swap    none    0       0

Belangrijk!

Op dit punt zou je de bovenstaande stappen op elk van je servers moeten hebben uitgevoerd. Dit zijn allemaal veel voorkomende stappen dat op alle nodes uitgevoerd moet worden.