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.
