Downstream Cluster Installatie met RKE2

Hier een uitleg over het installeren van een downstream cluster met 3 nodes met RKE2. Er is een master-node met etcd, een worker-node en een storage-node (voor Longhorn).

DNS Record Rancher Manager

Zorg ervoor dat de DNS naam (bv. rancher.digitalinfo.nl) voor het Rancher Management Cluster opgehaald kan worden en verwijst naar het IP adres van de load-balancer voor Rancher. In mijn thuislab gebruik ik een NGINX Reverse Proxy server en mijn Internet router heeft een https-port-forward naar deze NGINX server. Het externe IP-adres van de Internet router is dus wat in de DNS A-record komt te staan.

VM’s

De nodes zijn VM’s in mijn thuislab in Proxmox, genaamd speeltuin-cp01, speeltuin-w01 en speeltuin-s01 met de volgende eigenschappen:

Master/etcd node:

  • OS is Ubuntu 20.04.3 (initial boot via ISO)
  • Hard drive 100Gb
  • CPU – 8 cores
  • Memory – 8 Gb
  • Gebruiker met root rechten

Worker Node:

  • OS is Ubuntu 20.04.3 (initial boot via ISO)
  • Hard drive 100Gb
  • CPU – 16 cores
  • Memory – 16 Gb
  • Gebruiker met root rechten

Storage Node:

  • OS is Ubuntu 20.04.3 (initial boot via ISO)
  • Hard drive 100Gb
  • CPU – 4 cores
  • Memory – 8 Gb
  • Gebruiker met root rechten

Indien er gebruik wordt gemaakt van een ‘air-gapped’ omgeving, dan dienen de RKE2 bestanden klaar gezet te worden op de nodes. Raadpleeg hiervoor de documentatie op https://docs.rke2.io/install/airgap

In mijn thuislab heb ik toegang tot Internet dus is het niet nodig om de RKE2 bestanden op de nodes te plaatsen.

Installatie RKE2

Master Node:

Als eerst wordt een directory gemaakt met hierin een config.yaml bestand dat door de installatie van RKE2 wordt uitgelezen en gebruikt.

mkdir -p /etc/rancher/rke2

De inhoud van het config.yaml bestand is alsvolgt voor de master-node:

write-kubeconfig-mode: "0644"
token: token

Vervolgens worden de noodzakelijke binaries opgehaald en op de master-node geplaatst met:

curl -sfL https://get.rke2.io | sh -
systemctl enable rke2-server.service

Hiermee wordt een service aangemaakt maar nog niet gestart. Er kunnen nu eventueel extra parameters aan het service-script worden toegevoegd. Het service script is /etc/systemd/system/multi-user.target.wants/rke2-server.service

Indien daar wijzigingen in worden aangebracht dient de systemctl daemon herstart te worden met:

systemctl daemon-reload

De installatie begint op de master-node met het volgende commando:

systemctl start rke2-server.service

Wacht tot de prompt terug komt en kopieer dan het bestand kubectl naar het path:

cp /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/kubectl

gevolgd door het aanmaken van een .kube directory met hierin de kubeconfig file van deze node:

mkdir ~/.kube
cp /etc/rancher/rke2/rke2.yaml ~/.kube/config

watch kubectl get nodes

Wacht nu tot de status van de master node op ‘Ready‘ komt voordat de worker(s) toegevoegd kunnen worden.

Worker/Storage Node:

mkdir -p /etc/rancher/rke2

Voor de extra 2 nodes die toegevoegd gaan worden aan het cluster is de config.yaml alsvolgt:

write-kubeconfig-mode: "0644"
token: [token uit de config.yaml van de master-node]
server: https://[ip adres eerste node]:9345

De binaries worden nu opgehaald en de service aangemakt maar nog niet gestart:

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
systemctl enable rke2-agent.service

Hierna kan de service gestart worden met:

systemctl start rke2-agent.service

Op de master-node zal met het kubectl get nodes commando de worker-node(s) zichtbaar worden hetgeen zal resulteren in:

NAME           STATUS ROLES                     AGE   VERSION
speeltuin-cp01 Ready  control-plane,etcd,master 15m   v1.27.11+rke2r1
speeltuin-s01  Ready  <none>                    7m19s v1.27.11+rke2r1
speeltuin-w01  Ready  <none>                    7m58s v1.27.11+rke2r1