Rancher installatie (RKE)

Rancher Kubernetes Engine (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. Afhankelijk van de te gebruiken Kubernetes versie is er een (bijbehorende) rke versie. De releases kunnen hier opgehaald worden: RKE Releases

Het Rancher management cluster bestaat uit 3 nodes, elk met alle rollen, en wordt aangemaakt met behulp van RKE.

Voorwaarde is dat de nodes voorzien zijn van docker en dat er een gebruiker aanwezig is die de ssh-key accepteert voor ssh. Tevens dient deze gebruiker lid te zijn van de ‘docker’ groep. Vrijwel alle populaire Linux varianten zijn geschikt als OS.

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:

---
cluster_name: local
ssh_key_path: ~/.ssh/id_rsa
kubernetes_version: v1.21.7-rancher1-1

nodes:
- address: 192.168.178.70
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
  hostname_override: local-01
  internal_address: 192.168.178.70

- address: 192.168.178.71
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
  hostname_override: local-02
  internal_address: 192.168.178.71

- address: 192.168.178.72
  user: rancher
  role:
  - controlplane
  - etcd
  - worker
  hostname_override: local-03
  internal_address: 192.168.178.72

services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h
  kubelet:
    extra_args:
      cgroup-driver: systemd
      kube-reserved: "cpu=200m,memory=512Mi"
      system-reserved: "cpu=200m,memory=1024Mi"
      eviction-hard:  "memory.available<200Mi,,nodefs.available<10Gi"

upgrade_strategy:
  max_unavailable_worker: 1
  max_unavailable_controlplane: 1
  drain: true
  node_drain_input:
    Force: false
    IgnoreAllDaemonSets: true
    DeleteLocalData: true
    Timeout: 120

network:
  plugin: canal

Voor de kubelet-services wordt via ‘extra_args’ computer-resources gereserveerd en met behulp van thresholds voor de disk is de ‘pod-eviction’ instelling gemaakt. De regel kubernetes_version: v1.21.7-rancher1-1 bepaald dus de K8s versie en de bijbehorende RKE binary is dan v1.3.3. Controleer dit met:

$ rke -v
rke version v1.3.3

$ rke config --list-version --all
v1.19.16-rancher1-2
v1.20.13-rancher1-1
v1.18.20-rancher1-3
v1.21.7-rancher1-1
v1.22.4-rancher1-1

Eén commando volstaat voor het aanmaken van het cluster:

$ rke up

INFO[0000] Running RKE version: v1.3.3
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.

$ export KUBECONFIG=./kube_config_cluster.yml
$ kubectl get nodes

NAME       STATUS ROLES                     AGE  VERSION
local-01   Ready  controlplane,etcd,worker  1h   v1.21.7
local-02   Ready  controlplane,etcd,worker  1h   v1.21.7
local-03   Ready  controlplane,etcd,worker  1h   v1.21.7

cert-manager

Cert-Manager werkt met CDR’s (Custom Resource Definitions) en die worden eerst geladen en daarna kan via Helm de Cert-Manager deployment gestart worden:

$ kubectl create namespace cert-manager 
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.2/cert-manager.yaml

Vervolgens maken we een ClusterIssuer om certificaten via Let’s Encrypt op te kunnen halen. Het manifest clusterissuer.yaml ziet er alsvolgt uit:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    email: <hier_komt_jouw_emailadres@domain.com>
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: acme-issuer-account-key
    solvers:
    - http01:
        ingress:
          class: nginx

Invoeren met:

$ kubectl apply -f clusterissuer.yaml

Rancher Server

Hierna kan de Rancher Server geïnstalleerd worden. Allereerst een Helm repository toevoegen met:

$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
$ helm repo update

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.6.4 \
--namespace cattle-system \
--create-namespace \
--set hostname=rancher.digitalinfo.nl \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=youremail@domain.com

En het resultaat zou dan iets als dit moeten zijn:

NAME: rancher
LAST DEPLOYED: Wed Dec 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.