Skip to content

Syvir/Image_to_Cluster

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


ATELIER FROM IMAGE TO CLUSTER

L’idée en 30 secondes : Cet atelier consiste à industrialiser le cycle de vie d’une application simple en construisant une image applicative Nginx personnalisée avec Packer, puis en déployant automatiquement cette application sur un cluster Kubernetes léger (K3d) à l’aide d’Ansible, le tout dans un environnement reproductible via GitHub Codespaces. L’objectif est de comprendre comment des outils d’Infrastructure as Code permettent de passer d’un artefact applicatif maîtrisé à un déploiement cohérent et automatisé sur une plateforme d’exécution.


Séquence 1 : Codespace de Github

Objectif : Création d'un Codespace Github
Difficulté : Très facile (~5 minutes)

Faites un Fork de ce projet. Si besion, voici une vidéo d'accompagnement pour vous aider dans les "Forks" : Forker ce projet

Ensuite depuis l'onglet [CODE] de votre nouveau Repository, ouvrez un Codespace Github.


Séquence 2 : Création du cluster Kubernetes K3d

Objectif : Créer votre cluster Kubernetes K3d
Difficulté : Simple (~5 minutes)

Vous allez dans cette séquence mettre en place un cluster Kubernetes K3d contenant un master et 2 workers.
Dans le terminal du Codespace copier/coller les codes ci-dessous etape par étape :

Création du cluster K3d

curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
k3d cluster create lab \
  --servers 1 \
  --agents 2

vérification du cluster

kubectl get nodes

Déploiement d'une application (Docker Mario)

kubectl create deployment mario --image=sevenajay/mario
kubectl expose deployment mario --type=NodePort --port=80
kubectl get svc

Forward du port 80

kubectl port-forward svc/mario 8080:80 >/tmp/mario.log 2>&1 &

Réccupération de l'URL de l'application Mario Votre application Mario est déployée sur le cluster K3d. Pour obtenir votre URL cliquez sur l'onglet [PORTS] dans votre Codespace et rendez public votre port 8080 (Visibilité du port). Ouvrez l'URL dans votre navigateur et jouer !


Séquence 3 : Exercice

Objectif : Customisez un image Docker avec Packer et déploiement sur K3d via Ansible Difficulté : Moyen/Difficile (~2h)

Votre mission (si vous l'acceptez) : Créez une image applicative customisée à l'aide de Packer (Image de base Nginx embarquant le fichier index.html présent à la racine de ce Repository), puis déployer cette image customisée sur votre cluster K3d via Ansible, le tout toujours dans GitHub Codespace.

Architecture cible : Ci-dessous, l'architecture cible souhaitée.

Screenshot Actions


Processus de travail (résumé)

  1. Installation du cluster Kubernetes K3d (Séquence 1)
  2. Installation de Packer et Ansible
  3. Build de l'image customisée (Nginx + index.html)
  4. Import de l'image dans K3d
  5. Déploiement du service dans K3d via Ansible
  6. Ouverture des ports et vérification du fonctionnement

Séquence 4 : Documentation
Difficulté : Facile (~30 minutes)

Rapport d'Atelier : From Image to Cluster

Sommaire

  1. Avant toute chose : L'automatisation
  2. Objectif de l'Atelier
  3. Stack Technique
  4. Processus de Travail
  5. Défis Techniques & Solutions
  6. Guide d'utilisation (Pas à pas)

Avant toute chose : L'automatisation

Le projet est entièrement automatisé via un Makefile.

Pour tout installer et déployer :

make all

Pour voir l'application :

make port-forward

Objectif de l'Atelier

L'objectif de ce projet est d'industrialiser le cycle de vie d'une application Nginx personnalisée. Nous passons d'un simple fichier index.html à un déploiement orchestré sur un cluster Kubernetes (K3d) via des outils d'Infrastructure as Code (IaC) comme Packer et Ansible.


Stack Technique

  • Environnement : GitHub Codespaces (Ubuntu Noble).
  • Orchestration : K3d (Kubernetes dans Docker) avec 1 Master et 2 Workers.
  • Build d'image : Packer (Provisioning de fichier sur base Nginx).
  • Déploiement : Ansible (Collection kubernetes.core).

Processus de Travail

1. Construction de l'image (Packer)

Nous utilisons Packer pour créer une image Docker "Golden Image" contenant notre code statique.

  • Action : Copie du fichier index.html local vers /usr/share/nginx/html/ dans l'image.
  • Résultat : Une image nommée my-custom-nginx:v1 prête à l'emploi.

2. Provisioning du Cluster (K3d)

Le cluster est créé avec un nœud serveur et deux nœuds agents pour simuler un environnement de haute disponibilité.

k3d cluster create lab --servers 1 --agents 2

3. Déploiement Automatisé (Ansible)

Le playbook deploy.yml gère deux ressources critiques :

  • Deployment : Assure que 2 réplicas de notre application tournent en permanence.
  • Service (NodePort) : Expose l'application sur le cluster.

Défis Techniques & Solutions

Lors du développement, deux points d'attention majeurs ont été identifiés :

1. Interpréteur Python : Dans Codespaces, Ansible peut ne pas trouver la librairie kubernetes installée via pip.

  • Solution : Forcer l'interpréteur via :
-e "ansible_python_interpreter=$(which python3)"

2. Visibilité de l'image : K3d ne voit pas par défaut les images Docker locales.

  • Solution : Utilisation de l'import d'image :
k3d image import my-custom-nginx:v1 -c lab

Guide d'utilisation (Pas à pas)

Pré-requis

Installer les dépendances système :

sudo apt-get install packer ansible -y
sudo pip3 install kubernetes
ansible-galaxy collection install kubernetes.core

Lancement complet

Build de l'image :

packer init . && packer build nginx.pkr.hcl

Import dans le cluster :

k3d image import my-custom-nginx:v1 -c lab

Déploiement :

ansible-playbook deploy.yml -e "ansible_python_interpreter=$(which python3)"

Accès :

kubectl port-forward svc/my-nginx-service 8081:80

Evaluation

Cet atelier, noté sur 20 points, est évalué sur la base du barème suivant :

  • Repository exécutable sans erreur majeure (4 points)
  • Fonctionnement conforme au scénario annoncé (4 points)
  • Degré d'automatisation du projet (utilisation de Makefile ? script ? ...) (4 points)
  • Qualité du Readme (lisibilité, erreur, ...) (4 points)
  • Processus travail (quantité de commits, cohérence globale, interventions externes, ...) (4 points)

About

Séquence 9

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • HTML 52.5%
  • Makefile 31.2%
  • HCL 16.3%