Hier een uitleg over het installeren van 3 HA nodes voor Rancher Management met gebruik van RKE2.
DNS Record
Zorg ervoor dat de DNS naam (bv. rancher.digitalinfo.nl) voor het Rancher 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 3 nodes zijn VM’s in mijn thuislab in Proxmox, genaamd local-01, local-02 en local-03, met de volgende eigenschappen:
- OS is Ubuntu 20.04.3 (initial boot via ISO)
- Hard drive 50 Gb, type VirtIO Block
- CPU – 4 cores
- Memory – 8 Gb
- TPM enabled via TPM disk
- Gebruiker met root rechten
Installatie RKE2
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 eerste node:
write-kubeconfig-mode: "0644" token: token
Voor de extra 2 nodes die later toegevoegd gaan worden aan het cluster om deze HA te maken, is de config.yaml alsvolgt:
write-kubeconfig-mode: "0644" token: token server: https://[ip adres eerste node]:9345
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.
Als eerste worden de noodzakelijke binaries opgehaald en op alle nodes 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 eerste 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
Nu kan kubectl gebruikt worden om te controleren of de pods goed gestart zijn:
kubectl get pods -A
Indien de pods Completed of Running zijn kan RKE2 op de overige nodes gestart worden:
systemctl start rke2-server.service
Na een paar minuten zullen de nodes Ready zijn en heb je een RKE2 HA cluster. Ter controle op de eerste node:
kubectl get nodes NAME STATUS ROLES AGE VERSION local-01 Ready control-plane,etcd,master 10m v1.25.11+rke2r1 local-02 Ready control-plane,etcd,master 2m23s v1.25.11+rke2r1 local-03 Ready control-plane,etcd,master 112s v1.25.11+rke2r1
Mocht je het cluster willen managen vanaf een andere computer, kopieer dan het kubeconfig bestand van de nodes en pas het IP adres aan voor het cluster. Dit IP adres kan één van de nodes zijn of het IP adres van bv. NGINX Reverse Proxy dat dienst doet als LoadBalancer voor het cluster.
Cert Manager
cert-manager voegt certificaten en certificaat-issuers als resources toe aan Kubernetes clusters en maakt het eenvoudiger om certificaten aan te maken en te renewen wanner nodig.
Installatie van Rancher Management dient voorafgegaan te worden door de installatie van Cert-Manager. Dit gaat eenvoudig via kubectl zodat ook gelijk de CRD’s voor cert-manager geïnstalleerd worden:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
Controleer of de pods ‘Running’ zijn:
kubectl -n cert-manager get pods NAME READY STATUS RESTARTS AGE cert-manager-655c4cf99d-cnxmx 1/1 Running 0 40s cert-manager-cainjector-845856c584-xgg5k 1/1 Running 0 40s cert-manager-webhook-57876b9fd-7zncf 1/1 Running 0 40s
Certificaten
Rancher Manager gebruikt certificaten en die dienen klaar gezet te worden als secrets in Kubernetes voordat Rancher Manager geïnstalleerd gaat worden, tenzij gebruikt gemaakt wordt van de Let’s Encrypt ACME certificering. Hiervoor is dan wel Internet toegang nodig vanaf het cluster.
Ik maak gebruik van een aparte NGINX Reverse Proxy server en daarme heb ik dan een LoadBalancer voor de 3 nodes van Rancher Management.
De NGINX server heeft Certbot als ACME client om certificaten aan te maken en dat heb ik gedaan voor mijn rancher proxy. De certificaten die hierop staan worden gekopieerd naar mijn computer:
- Let’s Encrypt chain.pem -> cacerts.pem
- Let’s Encrypt cert.pem -> tls.crt
- Let’s Encrypt privkey.pem -> tls.key
Vervolgens worden de benodigde secrets aangemaakt voor Rancher Manager met kubectl:
kubectl create namespace cattle-system kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key
Rancher Manager
Gebruik Helm om Rancher Manager te installeren. Zonder versie-verwijzing zal de latest versie voor Rancher gebruikt worden. Controleer of deze werkt met de huidige Kubernetes versie op het cluster.
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable helm repo update helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.digitalinfo.nl \ --set ingress-tls.source=secret \ --set privateCA=true
Rancher Manager kan nu na een paar minuten gebruikt worden. Controleer of de pods ‘Running’ zijn:
kubectl -n cattle-system get pods -l app=rancher NAME READY STATUS RESTARTS AGE rancher-dd57c78cf-4bd72 1/1 Running 0 7m45s rancher-dd57c78cf-9h4b2 1/1 Running 0 7m45s rancher-dd57c78cf-qzr5b 1/1 Running 0 7m45s
Gebruik een browser en ga met https naar de URL zoals aangegeven in de hostname, in mij geval dus https://rancher.digitalinfo.nl
Op het scherm wordt aangegeven hoe het initiële admin wachtwoord opgehaald kan worden en deze dient dan als eerste gewijzigd te worden.