Cette solution a principalement été conçue pour du test mais elle peut être utilisée pour de la production (k3s mono-noeud) pour une petite population. Elle est simple à mettre en place.
Cette solution est plus complexe à mettre en oeuvre mais elle est conçue pour être utilisée en production pour une population comportant jusqu'à plusieurs milliers d'utilisateurs.
Disposer d'une machine virtuelle ou d'un serveur sous Ubuntu 20.04 ou 22.04.
Cette procédure utilise :
Démarrer la VM ubuntu.
Télécharger le dépôt git :
git clone https://gitlab.mim-libre.fr/EOLE/eole-3/provisionner.git
Exécuter le script :
bash provisionner/install-eolebase3.sh -i none
À ce stade, vous obtenez une infrastructure de test avec k3d qui fonctionne.
Vous pouvez exécuter des commandes kubernetes et helm.
Exemple: kubectl get nodes
Le script d’installation possède plusieurs options pour installer automatiquement des outils comme traefik, une loki-stack, un PV (Volume), etc…
Il est aussi possible de demander au script plus de serveurs ou d’agents kubernetes, d’utiliser k3s en mono-noeud au lieu de k3d et de se mettre en mode production.
Par exemple :
bash install-eolebase3.sh -m production -e k3s; export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
va transformer la machine virtuelle en serveur k3s mono-noeud prêt pour de la production.bash install-eolebase3.sh --loki-stack --loki-size 3Gi
va transformer la machine virtuelle en serveur k3d prêt pour du test, avec une loki-stack installée et configurée pour retenir jusqu’à 3Gio de logs.
Options de la commande install-eolebase3.sh
Option courte Option longue Usage
-m --mode <dev|production> dev par défaut
-d --domain eole3.lan par défaut
-e --engine <k3d|k3s> k3d par défault
-s --server nombre de serveurs k3d [default 1]
-a --agent nombre d’agent k3d [default 4]
-i --ingress nginx par défaut
-c --ingress-config fichier values.yaml pour traefik uniquement
-l --loki-stack installation d’une loki-stack sur k3d
--loki-size taille des données retenues pour loki-stack (taille en Gi)
--volume-size création d’un PV (taille en Gi)
Attention: certaines options ne sont pas compatibles entre elles (-s 2
et -m production
par exemple).
Pour installer un module EOLE Hâpy 2.8, il faut suivre la documentation ici :
http://eole.ac-dijon.fr/documentations/2.8/completes/HTML/ModuleHapy/co/00-presentationMiseEnOeuvre.html
Pour installer OpenNebula, il existe plusieurs tutoriels sur Internet, comme celui-ci pour installer OpenNebula sur Debian (bien qu’un peu vieux) : https://journaldunadminlinux.fr/tuto-installer-et-configurer-opennebula-sous-debian/.
La documentation d’installation officielle est ici :
https://docs.opennebula.io/6.2/installation_and_configuration/frontend_installation/index.html
Accès au magasin d’applications EOLE
Cette déclaration est nécessaire uniquement si vous n’avez pas déjà accès au magasin d’applications EOLE.
En installant un module Hâpy, vous avez accès à ce magasin par défaut.
Pour installer le magasin d'applications EOLE, il faut aller dans l'onglet Stockage > Places de marché
puis Créer une Place de marché
avec les paramètres suivants :
Nom | Eole Market |
---|---|
Backend de stockage | Eole Marketplace |
URL d’ancrage de la place de marché | https://market.eole.education/ |
Par défaut, les images (apps) de cette place de marché apparaîtront au bout de 5min.
Téléchargement des modèles depuis le magasin d’applications EOLE
Il faut maintenant télécharger les app nécessaires pour faire fonctionner un cluster k3s.
Dans l’onglet Stockage > Applications
, il faut télécharger les modèles suivants :
Modèle de VM : alpine-3.16.0-k3s
Modèles de service : k3s-cluster-3.16.0 et k3s-cluster-revprox-3.16.0
Création des autres modèles nécessaires
Modèle de disque
Il vous faut créer un disque nommé DSK-50Go en suivant les instructions ici : http://eole.ac-dijon.fr/documentations/2.8/completes/HTML/ModuleHapy/co/40-CreationImagesDisque.html
avec en paramètres :
Variable | Valeur |
---|---|
Nom | DSK-50Go |
Type | Image système d'exploitation |
Persistance de l'image | non |
Chemin d'accès | Image disque vide |
Espace de stockage | 50 Go |
Il vous faut un réseau interne n’ayant pas accès à internet et dont les contraintes sont d’avoir l’ip du serveur DNS et de la passerelle sur la même machine, la première du range d’ip (par exemple, 192.168.0.1 si le réseau interne commence à 192.168.0.1)
Pour en créer un, il faut aller dans l'onglet Réseau > Modèles réseau
.
Exemple de paramètres additionnels :
Variable | Valeur |
---|---|
DNS | 192.168.0.1 |
GATEWAY | 192.168.0.1 |
Réseau externe
Il vous faut un réseau qui puisse communiquer avec l'extérieur et qui puisse joindre l'API d'OpenNebula. Cette partie n'est nécessaire que si vous n'avez pas déjà un réseau externe. En installant un module Hâpy, vous avez accès à ce réseau CR_aca.
Pour en créer un, il faut aller dans l'onglet Réseau > Réseaux Virtuels
.
Instanciation du service Kubernetes
A ce stade, vous devriez pouvoir instancier 2 modèles de services :
Le modèle sans reverseProxy va déployer 1 VM k3s leader
et 4 VMs k3s agent
.
Le modèle avec reverseProxy va déployer 1 VM ReverseProxy
, 1 VM k3s leader
, 2 VMs k3s server
et 4 VMs k3s agent
. Ce modèle a l'avantage de n'exposer qu'une seule machine sur internet (la VM ReverseProxy
fait aussi office de passerelle pour les autres VMs)
Modèle avec Reverse Proxy
Dans l'onglet Instances > Services
ajouter une instance. Sélectionner k3s-cluster-revprox-3.16.0
.
Paramètres :
Mettre le réseau externe en réseau principal
et créer un réseau basé sur le réseau interne en réseau interne
. Sélectionner aucun ingress
(les autres options sont réservées à un usage avancé). Donner un nom de domaine que vous pouvez gérer en nom de domaine local
. Donner un nom
au cluster et une adresse email
.
Ensuite, attendre que toutes les machines démarrent. Les machines démarrent au fur et à mesure que les machines sont prêtes, il est donc normal de ne voir que 2 machines au début. Une fois les 8 machines démarrées, le cluster est presque prêt.
A ce stade, vous avez une infra avec k3s qui fonctionne. On peut se ssh sur le ReverseProxy puis rebondir vers la machine leader et faire des commandes kubernetes et helm. Ex: kubectl get nodes
ou helm list -A
Vous pouvez aussi aller sur l'adresse du reverseProxy en http sur le port 1936 pour voir les statistiques du reverse proxy (haproxy) et constater la répartition des requêtes sur les différents serveurs.
Modèle sans Reverse Proxy
Dans l'onglet Instances > Services
ajouter une instance. Sélectionner "k3s-cluster-3.16.0".
Paramètres :
Mettre le réseau externe en réseau principal
et créer un réseau basé sur le réseau interne en réseau interne
. Sélectionner aucun ingress
(les autres options sont réservées à un usage avancé). Donner un nom de domaine que vous pouvez gérer en nom de domaine local
. Donner un nom
au cluster et une adresse email
.
Ensuite, attendre que toutes les machines démarrent. Les machines démarrent au fur et à mesure que les machines sont prêtes, il est donc normal de ne voir qu'une machine au début. Une fois les 5 machines démarrées, le cluster est presque prêt.
A ce stade, vous avez une infra avec k3s qui fonctionne. On peut se ssh sur n'importe quelle machine et faire des commandes kubernetes et helm. Ex: sur le leader, kubectl get nodes
ou helm list -A