Rancher Lab aanmaken

Om een Rancher cluster te maken ga ik met behulp van Hyper-V een aantal virtuele machines aanmaken. Dit zijn dan de 3 nodes voor het cluster:
  • Rancher 1 – ControlPlane, etcd, worker
  • Rancher 2 – ControlPlane, etcd, worker
  • Rancher 3 – ControlPlane, etcd, worker
Het OS dat ik voor de Rancher Nodes ga gebruiken is RancherOS v1.5.5.

Rancher Nodes

Via rancher.com is een ISO van RancherOS te downloaden en die gebruik ik als opstart ISO voor de VM. Ik ga proberen deze op te starten met 3Gb geheugen en 2 CPU-cores.
Na een Enter op de standaard optie wordt RancherOS gestart. Uiteindelijk verschijnt dit scherm:
Het ziet er wat rommelig uit doordat er nog wat docker images gedownload worden maar de essentiele informatie staat op dit scherm, namelijk het IP adres. In dit geval 192.168.178.56. Daarnaast is de standaard gebruiker ingelogd en dus kunnen we als eerste het password wijzigen.
$ sudo passwd rancher
En hierna kan ik op mijn eigen computer de rancher VM benaderen als gebruiker rancher. Voordat ik dat doe, ga ik echter een cloud-config.yml bestand maken met instellingen voor deze rancher-node. Dit bestand ziet er alsvolgt uit:
#cloud-config

rancher:
  network:
    interfaces:
      eth0:
        address: 192.168.178.144/24
        gateway: 192.168.178.1
        dhcp: false
        mtu: 1500
    dns:
      search:
        - digitalinfo.local
      nameservers:
        - 192.168.178.1
        - 8.8.8.8

ssh_authorized_keys:
  - ssh-rsa AAA...ZZZZ nico@Nicos-MacBook-Pro.local

hostname: rancher-w1
Hiermee wordt dus de hostname en de netwerk-instellingen aangepast. Ook plaats ik de publieke SSH-key van mijn MacBook in de config zodat die gebruikt kan worden voor een ssh-sessie. Er kunnen met ‘cloud-config’ nog veel meer aanpassingen gedaan worden, zie daarvoor de handleiding op de rancher-website. Dit bestand wordt gekopieerd naar de rancher-node met:
$ scp cloud-config.yml rancher@192.168.178.56:/home/rancher/cloud-config.yml
Nu kunnen we inloggen op de rancher node (of de Hyper-V console gebruiken) en controleren of we een valide config-file hebben:
$ sudo ros config validate -i cloud-config.yml
Hierbij geldt dan ‘geen nieuw = goed nieuws‘ want als het bestand goed is krijg je geen antwoord terug. Is het fout, dan wordt dat wel aangegeven. (duh) Het config bestand gaan we nu gebruiken om Rancher als node te installeren op de disk /dev/sda:
$ sudo ros install -c cloud-confnig.yml /d /dev/sda
Voordat de reboot ingezet wordt, zorg ervoor dat de ISO file in de VM-instellingen van Hyper-V niet meer als boot-device staat ingesteld. Daarna kan de Rancher node herstart worden. Na de herstart zijn de instellingen opgepakt:
Na dit op alle 3 de VM’s te hebben uitgevoerd is het resultaat: – Minimaal één (RancherOS) VM – docker geïnstalleerd – gebruiker ‘rancher’ die lid is van de docker groep – ik kan inloggen via ssh m.b.v. mijn publieke sleutel. Dit zijn de minimale eisen voor RKE.

Rancher Kubernetes Engine (RKE)

RKE is een CNCF gecertificeerde distributie voor Kubernetes en draait zowel op bare-metal als op VM machines. De RKE wordt via een RKE-binary geconfigureerd en dat wordt via ‘brew’ op mijn MacBook geïnstalleerd. Hierna kan het commando ‘rke’ gebruikt worden.

cluster configuratie file

Het bestand cluster.yml is het configuratiebestand voor RKE en in de meest simpele vorm voor de 3 VM’s ziet dat er alsvolgt uit:
---
nodes:
- address: 192.168.178.141
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
- address: 192.168.178.142
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
- address: 192.168.178.143
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
Het spreekt voor zich, ik ga een cluster maken met drie nodes met de aangegeven ‘roles’. Eén commando volstaat:
$ rke up

INFO[0000] Running RKE version: v1.1.1
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused kubelet certificates
INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0255] Building Kubernetes cluster
...
INFO[0308] Finished building Kubernetes cluster successfully
Tijd voor koffie en als het bouwen van de cluster gereed is, vind je twee bestanden in de huidige directory:
  • kube_config_cluster.yml
  • cluster.rkestate
Het config-bestand wordt gebruikt voor ‘kubectl‘ via de KUBECONFIG environment variable en de cluster.rkestate wordt door rke gebruikt. Controle:
$ export KUBECONFIG=kube_config_cluster.yml
$ kubectl get nodes

NAME            STATUS ROLES                    AGE VERSION
192.168.178.141 Ready  controlplane,etcd,worker 11h v1.17.5
192.168.178.142 Ready  controlplane,etcd,worker 11h v1.17.5
192.168.178.143 Ready  controlplane,etcd,worker 11h v1.17.5
Met behulp van Helm kunnen nu m.b.v. zogenaamde charts, op een eenvoudige manier packages geïnstalleerd worden, bijvoorbeeld Rancher Server. Echter voordat we dat installeren dient er eerst een Certificate Manager aanwezig te zijn om de SSL-certificaten via LetsEncrypt te kunnen verkrijgen.
$ kubectl apply --validate=false \
-f https://github.com/jetstack/cert-manager/releases/download/v0.12.0/cert-manager.yaml

$ kubectl rollout status deployment -n cert-manager cert-manager
deployment "cert-manager" successfully rolled out
Hierna kan dus de Rancher Server geïnstalleerd worden. De eerste stap daarvoor is het aanmaken van de namespace:
$ kubectl create namespace cattle-system
Vervolgens kan met Helm de repository toegevoegd worden:
$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
en hierna kan het eigenlijke werk beginnen. Voor de eenvoud van geldige cerificaten maak ik hier gebruik van LetsEncrypt en daarvoor zijn de extra parameters voor docker aan het eind van dit commando. Zorg er wel voor dat de domain-name ge-resolved kan worden via DNS en gebruik een echt email-adres.
$ helm install rancher rancher-stable/rancher --version v2.3.5 \
--namespace cattle-system \
--set hostname=rancher.digitalinfo.nl \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=info@digitalinfo.nl
En het resultaat zou dan iets als dit moeten zijn:
NAME: rancher
LAST DEPLOYED: Wed May 27 18:32:53 2020
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.
NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued and Ingress comes up.
Check out our docs at https://rancher.com/docs/rancher/v2.x/en/
Browse to https://rancher.digitalinfo.nl
Happy Containering!
Browse nu naar de URL zoals ingesteld en dan kan het wachtwoord voor de Admin gebruiker ingesteld worden.
Vervolgens wordt de URL ingesteld voor de Rancher Server GUI.
Aangezien de Rancher Server nu in de lokale Kubernetes cluster ‘draait’ zal deze cluster als ‘local‘ automatisch ingesteld worden.