## Kubeadm installeren op de master-node

Initialiseer je cluster met `kubeadm`

Je hoeft deze stap alleen uit te voeren op je aangewezen hoofdserver, voor mij was dat `k8s-master-node`.

We gebruiken nu het interne IP-adres om de Kubernetes-API uit te zenden, in plaats van het internetgerichte adres (lokaal hebben we dit niet, in de cloud wel).

Je moet --apiserver-advertise-address vervangen door het IP-adres van je master node-host.

    $ sudo kubeadm init --apiserver-advertise-address=10.80.0.133 --kubernetes-version stable

- `--apiserver-advertise-address` bepaalt welk IP-adres Kubernetes zijn API-server moet adverteren.

- `--skip-preflight-checks`staat `kubeadm`toe om de host-kernel te controleren op vereiste functies. Als je problemen tegenkomt waarbij een host de kernel-metagegevens heeft verwijderd, moet je mogelijk met deze vlag draaien.

- `--kubernetes-version stable-1.16`dit pint de versie van het cluster naar 1.16, maar als je bijvoorbeeld Kubernetes 1.15 wilt gebruiken, verander dan gewoon de versie. Als je deze vlag verwijdert, wordt alles gebruikt dat geldt als "nieuwste".

Wij gebruiken de stable variant van Kubernetes, omdat deze werkt met Ubuntu 20.04

Je krijgt deze output als alles volgens plan is verlopen, zo niet, controleer dan de bovenstaande stappen.

Alleen uitvoeren als je geen sudo gebruiker hebt!

- Configureer een onbevoegd gebruikersaccount (als je deze niet hebt)

De Ubuntu-installatie wordt geleverd zonder een onbevoegd gebruikersaccount, dus laten we er een toevoegen.

    $ sudo useradd k8s -G sudo -m -s /bin/bash
    $ sudo passwd k8s

- Configureer omgevingsvariabelen voor de nieuwe gebruiker

Je kunt nu je omgeving configureren met de instructies aan het einde van het init-bericht hierboven.

Ga hier verder!

Schakel over naar het nieuwe gebruikersaccount en configureer het `KUBECONFIG`

    sudo su k8s

    cd $HOME
    sudo cp /etc/kubernetes/admin.conf $HOME/
    sudo chown $(id -u):$(id -g) $HOME/admin.conf

Probeer nu het KUBECONFIG-bestand uit:

    echo "export KUBECONFIG=$HOME/admin.conf" | tee -a ~/.bashrc
    source ~/.bashrc

Probeer een `kubectl`commando om te zien of het masterserver nu in de lijst staat, merk op dat het voorlopig een `NotReady`status heeft

    $ kubectl get node
    NAME               STATUS     ROLES    AGE     VERSION
    k8s-master         NotReady   master   3m32s   v1.20.2

- Pas uw pod-netwerk aan

We zullen nu de configuratie toepassen op het cluster met `kubectl`en ons nieuwe `KUBECONFIG`bestand. Dit maakt netwerken mogelijk en ons hoofdserver wordt `Ready`, op dat moment gaan we naar de andere werkservers.

    sudo mkdir -p /var/lib/weave
    head -c 16 /dev/urandom | shasum -a 256 | cut -d" " -f1 | sudo tee /var/lib/weave/weave-passwd

    kubectl create secret -n kube-system generic weave-passwd --from-file=/var/lib/weave/weave-passwd

Omdat we het standaard Pod-netwerk gebruiken voor hostnetwerken, moeten we een ander privé-subnet voor Weave-net gebruiken om conflicten te voorkomen. Gelukkig is 192.168.0.0/24 ruimte beschikbaar voor gebruik.

    $ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&password-secret=weave-passwd&env.IPALLOC_RANGE=192.168.0.0/24"

We hebben nu het netwerk geconfigureerd voor de pods.

- Optionele stap - taint the master

Kubernetes streeft ernaar een zeer beschikbare clustering container orchestrator te zijn waarbij workloads met redundantie over meerdere hosts worden verdeeld. We kunnen echter een enkele master node dwingen om workloads uit te voeren voor ontwikkeling door de "taint" te verwijderen:

Dit wordt alleen aanbevolen als je met een enkele host werkt, voer deze stap niet uit als je andere hosts aan het cluster toevoegt.

    $ kubectl taint nodes --all node-role.kubernetes.io/master-