Skip to content

clairepas/tp2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TP 2 : Docker/Kubernetes

Mise Ă  jour

AprÚs avoir forké le repo, pour se mettre à jour avec la derniÚre version, exécuter les commandes suivantes:

git remote add parent https://github.com/cours-ece/tp2.git
git pull

Instructions

Les réponses aux questions posées dans cet énoncé sont attendues dans un fichier answers.md situé dans le repo mentionné ci-dessus.

Le TP doit ĂȘtre rĂ©alisĂ© individuellement

Rappels

  • installer l'auto completion
  • doc docker
  • doc docker-compose
  • doc kubernetes

Docker

  • Concepts
    • Building
    • Shipping
    • Running
  • Docker doc reference
    • Dockerfile
    • docker-compose.yml
    • command line

Kubernetes

  • Orchestrateur
  • Ressources
  • Kind
    • Node
    • Pods
    • Service
    • Namespace
    • Secret
  • Probes
  • AKS

Ce qu'on ne va pas voir

  • Logging
  • Monitoring
  • Alerting
  • Rolling update
  • Helm
  • Service Mesh

0 : Description du projet

Tout au lond de ce tp, nous allons nous baser sur le projet situé dans le répertoire app de ce repo. Cette application est composée d'un front qui fait essentiellement office de passe-plat vers le back qui lui réalise les actions. L'application renvoie différentes informations sur:

  • les hostname des back et front
  • l'url appelĂ©e
  • l'heure d'appel
  • l'environement dans lequel l'app Ă  Ă©tĂ© dĂ©ployĂ©e

L'application peut ĂȘtre requĂȘtĂ©e sur :

  • n'importe quel path
  • ou sur le path /write

Un appel sur le path /write, engendrera une écriture de l'argument passé en paramÚtre dans un fichier de log situé dans le container back.

1 : Docker

Cette premiÚre partie est à réaliser individuellement.

1.0 : Pull request time !!

Forker et cloner le repository du tp2. Ajouter votre prénom, votre nom au fichier answers.md et votre numéro d'équipe (de 1 à 7), puis réaliser une pull request sur le repository du tp.

1.1 : Comprendre l'app

Inspecter les fichiers contenus dans le repertoire app pour comprendre la structure du projet.

1.2 : Let's Build it

Dans le répertoire app/back, créer un fichier Dockerfile capable de builder une image python contenant notre code back.

Help:

  • Consulter la Dockerfile reference documentation
  • Se baser sur une image python Docker Hub
  • Python utilise des libraires Ă  installer sur un host avant de pouvoir dĂ©marrer le programme. Pour installer ces libraires, exĂ©cuter la commande suivante (dans le Dockerfile)
pip install -r requirements.txt
  • la commande WORKDIR peut aider
  • CrĂ©er un repertoire logs Ă  la racine de votre projet
  • Alpine, c'est la vie

1.3 : Un premier lancement pas trĂšs concluant

Lancer un container à partir de l'image Docker que vous venez de créer. Ecrire la commande utilisée dans le fichier answers.md

1.4 : Accéder au service

Essayer d'accéder à l'application sur l'URL indiquée par les logs. Pourquoi, cette adresse ne répond rien ?

Redémarrer le container en ouvrant les ports nécessaires pour accéder au service. Ecrire la commande utilisée dans le fichier answers.md

1.5 : Env var

Essayer d'accĂ©der Ă  l'application sur l'URL indiquĂ©e par les logs. Retourner dans votre terminal, vous ĂȘtes gratifiĂ©s d'une belle stacktrace d'erreur. Cette erreur survient car le programme s'attend Ă  trouver la variable d'environement ENVIRONMENT settĂ©e dans le container.

RedĂ©marrer le container en ajoutant la variable d'environement manquante pour que le service rĂ©ponde correctement (inspiration: vous ĂȘtes dans un environement de dĂ©veloppement). Ecrire la commande utilisĂ©e dans le fichier answers.md

L'application démarre correctement et vous pouvez y accéder en suivant l'URL affichée par les logs.

1.6 : Let's Ship it

Afin de partager votre nouvelle création fantastique avec le monde, nous allons pousser l'image sur la registry officielle Docker appelée Docker Hub (ou Docker Store)

Pour cela:

  • Se crĂ©er un compte sur Docker Hub
  • CrĂ©er un nouveau repository rattachĂ© Ă  votre compte
  • Puis, pousser votre image fraichement créée sur votre repository

Votre image ne peut pas ĂȘtre poussĂ©e telle qu'elle est. Pourquoi ? Modifier le nom de votre image et pousser la Ă  nouveau sur votre repository Docker Hub. Ecrire la commande utilisĂ©e dans le fichier answers.md

1.7 : Let's Run it

Maintenant votre image partagée avec le monde, vous pouvez la puller depuis n'importe quelle machine sur laquelle Docker est installé.

Supprimer toutes vos images créée depuis le début du tp sur votre machine. Ecrire la commande utilisée dans le fichier answers.md

Relancer maintenant un container en vous basant sur l'image que vous venez de pousser dans votre repository Docker Hub. Que se passe t'il avant que l'image démarre. Ecrire la commande utilisée dans le fichier answers.md

Votre container fonctionne comme espéré mais si vous fermez votre terminal, celui-ci se stoppe. Relancer le container en mode détaché et vérifier que le container est accessible via son interface web. Ecrire la commande utilisée dans le fichier answers.md

1.8 : Le naming, c'est important

Votre container semble bien ĂȘtre dĂ©marrĂ©. En mode dĂ©tachĂ©, comment pouvez vous observer que le container est bien dĂ©marrĂ© ? Quel est le nom de votre container ?. Ecrire la commande utilisĂ©e dans le fichier answers.md

Redémarrer votre container en le renommant avec un nom ayant du sens. Ecrire la commande utilisée dans le fichier answers.md

1.9 : Go inside

Votre container back à présent démarré, ouvrir une session interactive pour observer les fichiers à l'interieur du container. Exécuter la commande suivante permettant de récupérer des infos sur l'OS:

cat /etc/*release

Quel est l'OS utilisé dans le container ? Copier la sortie de cette commande dans le fichier answers.md.

1.10 : Do it again (comme dirait Steely)

Se placer dans le répertoire app/front et réaliser toutes les étapes de la partie 1.2 à 1.9 pour la partie front de notre application.

Help:

  • Normalement, c'est assez simple Ă  partir du Dockerfile que vous avez crĂ©e pour le back
  • Les variables d'environement Ă  setter sont : APP_PORT et WS_BACK_URL
  • Si les deux services sont dĂ©marrĂ©s, attention Ă  l'exposition des ports

N'oubliez pas de pusher votre image sur votre registry docker hub

1.11 : C'est mieux Ă  deux

Lancer votre container back en mĂȘme temps que votre container front et modifier les variables d'environement du front pour intĂ©grer les deux (indice: ça devrait se passer au niveau du WS_BACK_URL). Ecrire la commande utilisĂ©e dans le fichier answers.md

Attention: l'url à utiliser pour point sur le service back n'est pas si simple à trouver. Vérifier vos ips.

AprÚs avoir lancé les deux services de l'application, essayer d'ajouter un path à la fin de l'URL et copier la réponse obtenue dans le fichier answers.md.

1.11 : Test des urls de write

Utiliser le path /write de l'URL du front pour écrire dans le fichier log du container back. Vérifier le contenue du fichier log en se connectant en interactif au container back. Ecrire la commande utilisée dans le fichier answers.md

2 : Docker Compose

Dans cette partie, nous allons utiliser docker-compose pour automatiser le déploiement de l'app que nous avons buildé dans la partie 1 du tp.

2.0 : Télécharger docker-compose

Aller sur le site officiel et installer docker-compose pour votre OS

Attention: Vérifier que vous avez bien stoppé tous vos containers avant de démarrer cette partie.

2.1 : Création du docker compose

A la racine du répertoire app, créer un ficher docker-compose.yml contenant le code suivant:

version: '3'
services:
  mon-service:
    image: mon-image

Editer le fichier pour pointer sur votre image back et renommer le service comme vous le souhaitez. Puis, démarrer le service back à l'aide des commandes docker-compose

Documentation disponible sur le site officiel

Ecrire la commande utilisée dans le fichier answers.md

2.2 : Ports

Modifier le docker-compose.yml pour ajouter un montage sur le port accessible du service back.

Relancer le container et tester la solution.

2.3 : Env var

Modifier le docker-compose.yml pour ajouter la variable d'environement nécessaire à l'utilisation du service back.

Relancer le container et tester la solution.

2.4 : A deux c'est mieux

Modifier le docker-compose.yml pour ajouter le service front. Ne pas oublier de renseigner les ports et variables d'environement.

Relancer les container et tester la solution.

2.5 : Pour vivre heureux, vivons cachés

Pour l'instant les services front et back sont exposĂ©s sur le host. Hors, le service back ne devrait pas ĂȘtre accessible directement mais uniquement par l'intermĂ©diaire du service front.

Modifier le docker-compose.yml en supprimant le port exposé du service back et faire pointer le service front directement sur le container du back.

2.6 : Détachez le !

Relancer l'ensemble des services en mode détaché. Ecrire la commande utilisée dans le fichier answers.md

Visualiser les logs des diffĂ©rents services en mĂȘme temps. Ecrire la commande utilisĂ©e dans le fichier answers.md

2.7 : Persistence

Les services sont maintenant lancés correctement via docker-compose. Cependant, à chaque redémarrage, les données sont flushée.

Modifier le docker-compose.yml pour ajouter un montage de volume afin de persister les données sur le disque entre les redémarrages.

Attention: AprÚs cette étape, commenter les lignes relatives au montage de volume dans le docker-compose.yml

2.8 : Upgrade

A tout moment, lorsque vous avez lancé vos services en mode detaché, vous pouvez recharger une nouvelle version en exécutant la ligne ci-dessous à nouveau:

docker-compose up -d

2.9 : Scaling de l'espace

Les services doivent ĂȘtre dĂ©marrĂ©s en mode dĂ©tachĂ©. Essayer de scaler le webservice back en doublant le nombre de container back dĂ©marrĂ©s. Ecrire la commande utilisĂ©e dans le fichier answers.md

Vérifier que les hostnames changent dans la UI.

3 : Kubernetes

2.0 : Configurer Kubernetes pour se connecter au cluster

Diviser la classe en 7 groupes de 4 personnes, puis attribuer un chiffre de 1 à 7 à chaque groupe. Dans la suite de la consigne du tp, le nombre qui vous sera attribué sera nommé {NB}.

cd kube
unzip config.zip
# Le mot de passe est au tableau
kubectl config use-context ece{NB}
  • VĂ©rifier que la configuration fonctionne correctement
kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   heapster-5f8d5688-lr5p4                 2/2     Running   0          14h
kube-system   kube-dns-v20-668899dbdc-n4rg8           3/3     Running   0          14h
kube-system   kube-dns-v20-668899dbdc-v8fwh           3/3     Running   0          14h
kube-system   kube-proxy-m8gqs                        1/1     Running   0          14h
kube-system   kube-proxy-sr4nr                        1/1     Running   0          14h
kube-system   kube-proxy-xwvt8                        1/1     Running   0          14h
kube-system   kube-svc-redirect-56cx6                 2/2     Running   0          14h
kube-system   kube-svc-redirect-gxzw9                 2/2     Running   0          14h
kube-system   kube-svc-redirect-rf4nb                 2/2     Running   0          14h
kube-system   kubernetes-dashboard-7ff68ff786-h44zh   1/1     Running   2          14h
kube-system   metrics-server-76f76c6bfd-dhjbl         1/1     Running   0          14h
kube-system   tunnelfront-5b5b89b86c-qjgbt            1/1     Running   0          14h

2.1 : Naviguer dans l'aide de Kubernetes

2.2 : Se familiariser avec Kubernetes

# Récupérer les infos du cluster
kubectl cluster-info
# Lister les nodes
kubectl get node
# Récupérer l'OS et le kernel de chaque noeud
kubectl get node -o wide
# Lister les pods
kubectl get pod

2.3 : Déployer le projet sur Kubernetes

  • Regarder du cotĂ© de Kompose
  • Voir les manifests gĂ©nĂ©rĂ©s et dĂ©ployer sur Kubernetes
  • A quoi servent les fichiers deployment et service ?
  • Lister les dĂ©ploiements, les pods et les services gĂ©nĂ©rĂ©s sur le cluster

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 49.2%
  • HTML 30.4%
  • Dockerfile 9.4%
  • JavaScript 7.9%
  • Ruby 3.1%