Kubernetes cluster via K3S

Ter lering ende vermaeck ga ik een Kubernetes Cluster maken met Raspberry PI’s, model 4B, bestaande uit één master en twee workers (minions). De RPI’s krijgen hun spanning via USB-C connectors, aangesloten op een USB Power Hub. Via ethernetkabels zijn ze allen aangesloten op een netwerk-switch (Gigabit). Een SD card voorziet in het Linux OS. (Ubuntu)

De pre-requisites zijn:

  • Nieuwe installatie van Ubuntu
  • Netwerkkabels aangesloten op een Gigabit Network switch waarop ook mijn laptop is aangesloten (en dus SSH toegang)
  • USB voedingskabels aangesloten aan een Xtorm USB Power Hub
  • Hostname en Static IP adres
    • master = 192.168.1.50
    • node1 = 192.168.1.51
    • node2 = 192.168.1.52

Stap 1. Installeren Ubuntu

Om ubuntu te installeren, volg de stappen zoals beschreven in ‘Installatie Ubuntu op RPi

Stap 2. Installatie K3S master node

De installatie wordt met een script uitgevoerd vanuit de volgende link:

$ curl -sfL https://get.k3s.io | sudo sh -

Na de installatie kan de controle uitgevoerd worden met

$ k3s check-config

Indien dan de status ‘pass‘ is kan de master-node gecontroleerd worden met:

$ sudo kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
rpi-1   Ready    master   34h   v1.19.4+k3s1

Om nu workers-nodes te kunnen koppelen is een zogenaamde join-token nodig en die haal je hier op:

$ sudo cat /var/lib/rancher/k3s/server/node-token

Stap 3. Installatie K3S worker nodes

Maak verbinding met de worker node

$ ssh rpi-2

En voer de volgende commando’s uit:

$ export K3S_URL="https://<IP ADRES VAN MASTER NODE>:6443"
$ export K3S_TOKEN="<JOIN-TOKEN UIT STAP 2>"
$ curl -sfL https://get.k3s.io | sudo sh -
$ sudo k3s agent --server ${K3S_URL} --token ${K3S_TOKEN}

Herhaal deze stappen voor alle worker-nodes die toegevoegd dienen te worden.

KubeConfig ophalen

Om kubectl op je werkstation te kunnen gebruiken heb je de KUBECONFIG yaml file nodig, die vind je op de master-node:

$ sudo cat /etc/rancher/k3s/k3s.yaml

Kopieer deze op je lokale werkstation naar ~/.kube/config of naar een ander bestand waar je een verwijzing mee maakt via ‘export KUBECONFIG=<bestand>

$ export KUBECONFIG=~/.kube/rpi 
$ kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
rpi-1   Ready    master   35h   v1.19.4+k3s1
rpi-2   Ready    <none>   34h   v1.19.4+k3s1
rpi-3   Ready    <none>   34h   v1.19.4+k3s1


Om nu te forceren dat deployments op de worker-nodes worden ge-scheduled, kan een label op de master-node gezet worden zodat deze niet meegenomen wordt door de schedule-service:

$ kubectl taint node rpi-1 node-role.kubernetes.io/master=true:NoSchedule

Het voordeel van K3S is dat de metrics-server automatisch toegevoegd wordt en je dus het ‘kubectl top’ commando kunt gebruiken.

Ook wordt ‘traefik‘ geïnstalleerd waardoor je load-balancers kunt aanmaken en benaderen met ‘ingress’, out-of-the-box!

De K3S-cluster kan nu ook toegevoegd worden aan een bestaande Rancher Manager en daarmee krijg je een GUI om je workloads te beheren.

Hiermee kan dan ook ‘Continuous Delivery‘ gebruikt worden om applicaties vanuit GitRepo’s te deployen. Zie hiervoor de pagina ‘CI/CD met Rancher 2.5

That’s all! Have fun 😉