Installer Rancher Server
Au sommaire :
- 1-Qu'est-ce que Rancher Server ?
- 2-Fonctionnement
- 3-Prérequis
- 4-Déploiement
- 5-Configuration
- 6-Créer un cluster
- 7-Solution si échec de la création du cluster
- 8-Déployer une application
1-Qu'est-ce que Rancher Server ?
Avant de parler de Rancher Server, parlons rapidement de la société Rancher Lab.
C'est une société qui été fondé en 2014 à Cupertino en Californie qui est devenue de plus en plus populaire au sein de la communauté Kubernetes car leur principal mérite est d'avoir aider à simplifier son utilisation à travers des solutions comme Rancher Server, les distributions RKE1, RKE 2 et surtout K3s qui est devenu la solution de référence pour le déploiement de clusters Kubernetes dans le domaine du edge computing.
Elle a depuis été racheté en juillet 2020 par la société allemande Suse qui est l'un des trois géants du secteur des distributions Linux avec Canonical et Red Hat.
Rancher Labs propose donc dans son écosystème Rancher Server qui est une plateforme d'orchestration et de management qui permet de créer et administrer des clusters sur site (on-premise) et dans le cloud avec des services managés comme EKS, AKS et GKS.
C'est une solution 100% open-source qui dispose d'une large communauté qui contribue à son code et créer de la documentation
Rancher Server utilise Docker comme runtime par défaut pour la création de conteneurs sur le système hôte, peut-être déployé sur des serveurs bare-metal jusqu'aux machines virtuelles en passant par des Raspberry Pi (idéal dans le cadre du Edge Computing) et surtout, ne dispose d'aucun vendor lock-in (open-source oblige), c'est à dire que Rancher peut-être désinstallé sans impacter le cluster Kubernetes qui peut être importé ailleurs.
Pour commencer avec Kubernetes en douceur, Rancher Server est la solution que je recommande pour les débutants.
2-Fonctionnement
Rancher fonctionne avec trois pods qui héberge des contrôleurs primaires. Nous allons faire une liste exhaustive de ces derniers.
Note : Accrochez-vous, j'ai simplifier au maximum mais rien ne vaut de se plonger dans la documentation de Rancher.
Rancher Authentication Controller
Il est responsable de la gestion des utilisateurs et des permission dans Rancher. Sans lui, point de synchronisation des utilisateurs/groupes avec les clusters k8s.
Il faut comprendre que de base, k8s n'intègre pas de services d’authentifications externes (Gitlab, Okta par exemple) et kube-api-server ne sais pas ce qu'est un LDAP, il faut passer par un webhook (appel HTTP) pour pouvoir intégrer un fournisseur d'authentification externe, ce qui est assez fastidieux.
Ce contrôleur facile grandement les choses en permettant donc de pouvoir se connecté à un service d'authentification externe de type LDAP, AD, GitHub, Okta et bien d'autres.
Rancher Catalog Controller
Il est responsable de la gestion des catalogues d'applications qui sont au format "Charts" du gestionnaire de paquets Helm, la référence pour Kubernetes. Vous pouvez déployer des applications déjà prêtes ou bien ajouter votre propre dépôt, idéal si vous travaillez dans une équipe DevOps.
Rancher Cluster Controller
Il est responsable de la gestion de chaque cluster RKE que Rancher a provisionné
Rancher Node Controller
Il est responsable du provisionnement des nœuds du cluster
Rancher Pipeline Controller
Il gère la pipeline Ci/CD intégré à Rancher
Rancher Monitoring Controller
Il s'occupe de l'intégration entre le système de surveillance de l'interface utilisateur Rancher UI et l'application rancher-monitoring qui est construite au dessus de Prometheus, Prometheus Adapter, Prometheus Operator, Grafana et Alertmanager
Rancher Logging Controller
Il s'occupe de l'intégration entre le système de journalisation de l'interface utilisateur Rancher UI et Banzai Cloud Logging operator
Rancher Istio Controller
Il s'occupe de l'intégration entre l'interface utilisateur Rancher UI et le déploiement d'Istio sur le cluster
Rancher CIS Scan Controller
Il s'occupe de l'installation et la configuration de l'outil rancher-cis-benchmark qui est construit au-dessus de kube-bench, un outil open source d'Aqua Security
Castle-cluster-agent
- il créé une connexion WebSocket à l'API Rancher
- L'agent Cattle-cluster créer une connexion TCP par le biais de la connexion WebSocket vers le pod leader Rancher
Castle-node-agent
- S’exécute comme un processus
- Utilise une connexion websocker
Rancher-created-nodes
- S'occupe de créer le cluster de machines virtuelles
3-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, utilisez un template cloud-init.
4-Déploiement
Créez un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration.
- version : 3.9 (il y a plus récent mais c'est pour l'exemple)
- network : en bridge (l'adresse IP sera celle de la machine virtuelle)
- services : c'est là qu'il faudra ajouter les configurations de vos conteneurs
- image : nom du registry suivi du nom de l'application (rancher/rancher:latest)
- container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire (mieux vaut le nommer vous même)
- ports : ouvrez les ports 80 et 443 (HTTP et HTTPS) si aucune application utilise ces ports en local
- volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/rancher). Le dossier contiendra les données persistantes dont magasin de données clé-valeur etcd
- environment : la variable "CASTLE_BOOSTRAP_PASSWORD" sert à générer un mot de passe (kubernetes pour l'exemple)
- priviliged : activé sur "true" pour donner au conteneur un accès privilégié aux ressources au même niveau que l'hôte
- restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l’arrêtez, il faudra le démarrer manuellement
version: "3.9"
networks:
default:
driver: bridge
services:
rancher:
image: rancher/rancher:latest
container_name: rancher
ports:
- 80:80
- 443:443
volumes:
- /home/user_name/docker/rancher:/var/lib/rancher
environment:
- CATTLE_BOOTSTRAP_PASSWORD=kubernetes
privileged: true
restart: unless-stopped
À l'intérieur du dossier "docker', déployez le conteneur avec la commande suivante.
docker compose up -d
Tapez l'adresse IP de la machine virtuelle pour accéder à l'interface d'administration.
5-Configuration
Après avoir déployer Rancher Server, tapez l'adresse IP de la machine virtuelle dans votre navigateur pour accéder à l'interface web et cliquez sur 'Continuer vers le site'.
Tapez votre mot de passe (celui indiqué dans la variable CATTLE_BOOTSTRAP_PASSWORD).
Cochez "By checking the box..." et cliquez sur "Continue".
Félicitation!!!! Vous avez accès à l'interface de Rancher Server en version 2.7.0 (c'est le début de votre aventure dans l'univers de kubernetes, accrochez-vous).
En haut, à droite de l'écran, allez dans "Preferences" et profitez-en pour changer la langue (restez sur l'anglais, c'est la langue de l'empire) et basculez le thème sur "Dark" si vous avez les yeux sensibles comme moi.
6-Créer un cluster
On passe aux choses sérieuses. Pour créer un cluster, cliquez sur "Create"
Vous avez le choix entre :
- Créer un cluster sur les services managés EKS, AKS et GKE (cloud obligatoire)
- Provisionner un nouveau nœud et créer un cluster sur EC2, Azure, Digital Ocean, Harvester, Linode et VMware Vsphére
- Utiliser un nœud existant (c'est notre cas) et créer un cluster RKE1
Note :
- Harvester est une solution hyperconvergée de Rancher qui permet gérer à la fois des conteneurs et des machines virtuelles via Kubevirt (on en reparlera dans un prochain tutoriel).
- Rancher propose entre créer un cluster RKE1 ou un cluster RK2 (RKE Government, destiné au gouvernement américain) et K3S (version légère de k8s). Pour l'exemple, on va rester sur RKE1 (j'ai un comparatif en cours de rédaction) mais vous voulez connaitre les principales différences, RKE1 utilise Docker comme runtime d'exécution pour déployer et gérer les composants du plan de contrôle (control plane) tandis que RKE2 utilise containerd comme runtime et lance les composants du plan de contrôle sous forme de pods statiques gérés par le kubelet.
Donnez un nom à votre cluster (tech2rue pour l'exemple) et cliquez sur "Next".
Cochez les rôles "etc" (magasin de données clé-valeur) et "Control Plane" pour faire de ce nœud le "master" (le cerveau du cluster).
Enfin, copiez la commande et cliquez sur "Done" pour provisionner le noeud.
Rancher se met en attente.
Retournez sur votre terminal et tapez la commande que vous avez copier précédemment.
Si tout se passe bien, passez à l'étape 7, sinon passez à l'étape 6 en cas de message d'erreur.
7-Solution si échec de la création du cluster
Si vous avez ce message d'erreur, suivez la procédure suivante.
Il vous faudra effectuer les actions suivantes :
- Arrêt de tout les conteneurs
- Nettoyage forcé du docker system
- Suppression de tout les volumes
- Suppression de toute les images
- Enfin, suppression dans "/etc/" de tout ce qui touche à kubernetes
docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \
/etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/pods \
/var/run/calico
Tentez de nouveau de créer un cluster et si tout se passe bien, il sera actif.
8-Déployer une application
Pour ce premier tutoriel, on va pas faire les fous, on va commencer en douceur et faire en sorte de déployer une application, la rendre accessible et tester la haute disponibilité avec les replicas.
Cliquez sur votre cluster puis sur "Workload" et sur "Create" à droite de votre écran.
On souhaite déployer une application donc cliquez sur "Deployment".
Ajoutez les informations suivantes pour déployer votre conteneur.
- Name : le nom du déploiement dans le namespace "default" (librespeed)
- Container Name : le nom du conteneur (librespeed)
- Service Type : indiquez comme "Node Port" pour pouvoir accéder à l'application en local
- Name : le nom du port (ce que vous voulez)
- Private Container Port : le port par défaut du conteneur (80 pour librespeed)
- Protocol : TCP par défaut
- Listening Port ; port d'écoute du conteneur (30001 pour l'exemple)
- Service Type : selectionnez "Node Port"
- Name : ce que vous voulez (librespeed pour l'exemple)
- Private Container Port : indiquez 80 qui ets le port par défaut du conteneur
- Protocol : TCP par défaut
- Listening : indiquez un numéro de port (30001 pour l'exemple)
C'est pas obligatoire dans ce cas précis mais c'est pour que vous puissiez vous familiariser.
- PUID : identifiant de l'utilisateur
- PGID : identifiant du groupe
- TZ : fuseau horaire
Cliquez sur "Save" et si tout va bien, votre pod sera déployé.
Essayez d'y accéder à travers votre navigateur à l'adresse suivante : IP_ADRESS:30001.
Si vous avez cette page, félicitation, vous avez réussi votre premier déploiement sur Kubernetes.
Vous pouvez tenter d'ajouter 2 replicas supplémentaires et de les supprimer, vous verrez qu'ils seront immédiatement remplacer par des nouveaux. C'est les avantages de la haute disponibilité.
Profitez-en aussi pour visualiser l'état de votre cluster et avoir toutes sortes d'informations à son sujet.
Sources :