###### tags: `Université`
###### tags: `Infrastructure`

Julien CASTAN & Mariem BEN SALAH
Master 1 Informatique : Architecte Logiciel (Niort)
Date : 10 février 2022
Machine utilisée : NAJA07
# Virtualisation, cloud et déploiement d'applications
## TP2 Docker : Kubernetes
Infos pour le TP :
>Un seul dépot pour deux
Se mettre dans la peau présentation devant CTO
sources pour scémas utilisés
### Kubernetes, c'est quoi ?
1. Définition :
Kubernetes est une plateforme Open Source qui automatise l'exploitation des conteneurs Linux.Elle permet d'éliminer de nombreux processus manuels associés au déploiement des applications conteneurisées.
À l'origine, la plateforme Kubernetes a été développée et conçue par des ingénieurs chez Google. Google était l'un des premiers contributeurs aux technologies de conteneurs Linux, et a d'ailleurs expliqué publiquement que tout dans l'entreprise fonctionnait dans des conteneurs (il s'agit de la technologie à la base des services cloud de Google). Google déploie plus de 2 milliards de conteneurs par semaine via une plateforme interne nommée Borg.
2. Grands principes d'orchestration :
L'orchestration des conteneurs permet d'automatiser le déploiement, la gestion, la mise à l'échelle et la mise en réseau des conteneurs. Les entreprises qui ont besoin de déployer et de gérer des centaines ou des milliers de conteneurs Linux et d'hôtes peuvent tirer parti de l'orchestration des conteneurs.Elle permet de déployer la même application dans différents environnements sans modifier sa conception. De plus, les microservices stockés dans les conteneurs simplifient l'orchestration des services, notamment les services de stockage, de réseau et de sécurité.
Nous pouvons utiliser l'orchestration des conteneurs pour automatiser et gérer les tâches suivantes :
* Provisionnement et déploiement
* Configuration et planification
* Allocation des ressources
* Disponibilité des conteneurs
* Mise à l'échelle ou suppression de conteneurs en fonction des charges de travail dans l'infrastructure
* Équilibrage de la charge et routage du trafic
* Surveillance de l'intégrité des conteneurs
* Configuration des applications en fonction du conteneur sur lequel elles vont s'exécuter
* Sécurisation des interactions entre les conteneurs
### Comment ça fonctionne ?
Nous décrivons la configuration de l'application à l'aide de fichiers YAML ou JSON. Le fichier de configuration indique à l'outil de gestion des conteneurs où trouver les images de conteneurs, comment établir un réseau et où stocker les journaux.
Lors du déploiement d'un nouveau conteneur, l'outil de gestion des conteneurs programme automatiquement le déploiement vers un cluster et trouve l'hôte approprié en tenant compte de toutes les exigences ou restrictions définies. L'outil d'orchestration gère alors le cycle de vie du conteneur d'après les caractéristiques indiquées dans le fichier de composition.
Vous pouvez utiliser des modèles Kubernetes pour gérer la configuration, le cycle de vie et la mise à l'échelle des applications et services basés sur des conteneurs. Un développeur Kubernetes peut ainsi créer des systèmes complets à partir de ces modèles reproductibles.
L'orchestration des conteneurs est possible dans tous les environnements qui exécutent des conteneurs, y compris les serveurs sur site, les clouds publics et les clouds privés.
1. #### Est-ce que c'est intéressant de passer sur ce systeme?
Le plus intéressant de Kubernetes est l'élimination du facteur humain, qui constitue le maillon le plus faible. Le déploiement de conteneurs au sein d'une grappe d'infrastructures, ainsi que le démarrage et l'arrêt de nœuds supplémentaires, peuvent en principe être effectués manuellement. Mais dans ce cas, nous ne pourrons pas anticiper aussi efficacement que si nous laissions ces processus se dérouler de manière entièrement automatique.
Et donc le premier but de la mise en grappe avec des conteneurs est précisément de minimiser l'impact d'une éventuelle erreur de système, en veillant à ce que chaque composant soit redondant et à ce que les ressources puissent être mises à l'échelle de manière élastique. Avec Kubernetes, cela se produit immédiatement, avant même que nous ayons eu le temps d'intervenir en tant qu'administrateur humain.
Cette approche permet aussi d'entièrement automatiser la décision de prévoir des nœuds supplémentaires, et de rediriger le trafic loin de tout problème éventuel. Un serveur maître surveille l'infrastructure de la grappe, qui démarre et arrête les nœuds supplémentaires en fonction des règles qui ont été fixées. Les nœuds sont des éléments d'infrastructure virtuellement isolés sur lesquels chaque conteneur tourne, en même temps que les paramètres du réseau régissant l'accès et la répartition des charges. Les conteneurs qui interagissent et sont très interdépendants peuvent également être regroupés sous forme de pods.
La gestion de votre infrastructure et de vos composants applicatifs est donc beaucoup moins axée sur le travail manuel. Car vous administrez le serveur maître et non plus chaque nœud séparément. La connaissance de formats tels que JSON (JavaScript Object Notation), REST (Representational State Transfer) ou YAML n'est pas un luxe pour pouvoir fixer les règles du jeu par écrit. Sur le plan conceptuel, tout cela est très éloigné de l'administration système au sens courant du terme.
4. #### Autre Alternatives:
Le revers de la médaille est que nous devons également être en mesure de gérer les innombrables possibilités offertes par Kubernetes. Sans les connaissances techniques nécessaires, cette multitude de possibilités peut rapidement devenir un véritable casse-tête. C
IL y a une autre approche plus simple, SquareScale simplifie ainsi la vie des ops et des développeurs en leur proposant une solution accessible et sans compromis sur la sécurité mais surtout sans devoir se confronter à la complexité, aux coûts d’exploitation et de maintenance élevés souvent associés à Kubernetes.
### Preuve de concept, implémentation de l'architecture
Pour mettre en place notre Pooc, nous devons installer Kube avec au choix :
>- Minikube = https://minikube.sigs.k8s.io/docs/ Sympa, consomme pas mal, utilise Nginx comme ingress (peut être remplacé)
>- K3S = https://k3s.io/ Léger et tourne sur un Raspberry pi, utilise >Traefik comme ingress (peut être remplacé)
>- Microk8S = https://microk8s.io/ Crash à chaque redémarrage et à terme compliqué mettre en place
Pour débuter, nous avons choisi Minikube.
### Installation de Minikube sur Ubuntu
Commandes pour l'installation :
```
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
```

l'installation de Minikube :

verification de status de Minikube:


### Installation lens
Lens est un tableau de bord Kubernetes open source avancé qui fournit une vue graphique de votre cluster. Contrairement aux autres tableaux de bord, Lens est une application de bureau basée sur Electron que vous installez sur votre machine. Il se connecte à votre cluster à l’aide de vos fichiers Kubeconfig existants.
A partir d'un package Débian disponnible sur le site web de [Lens ici](https://k8slens.dev/)

### Build image docker from dockerfile (Tomcat)
```docker build -t tomcat .```

### Création compte docker hub sur le site de [Docker ici](https://hub.docker.com/)
>Attention, lorsque le compte Docker vient d'être crée, il faut bien penser à valider l'adresse mail avant de créer le répository, sinon ça ne fonctionne pas.
### Push image tomcat on docker hub
1. #### Création d'un tag
```
docker tag tomcat bslh/tomcat:tomcat
```
2. #### Login
```
docker login
```
3. #### Push
```
docker push bslh/tomcat:tomcat
```

4. #### Docker Hub, page repository :

### Déployer Tomcat sur Kubernetes :
### Bibliographie
[https://www.redhat.com/fr/topics/containers/what-is-kubernetes](https://www.redhat.com/fr/topics/containers/what-is-kubernetes)
installation minikube
[https://kubernetes.io/fr/docs/tasks/tools/install-minikube/](https://kubernetes.io/fr/docs/tasks/tools/install-minikube/)
pour push image
[https://jhooq.com/requested-access-to-resource-is-denied/#:~:text=As%20the%20error%20says%20requested,or%20any%20other%20docker%20command.&text=Or%20you%20are%20not%20using%20the%20docker%20hub%20credentials%20correctly.](https://jhooq.com/requested-access-to-resource-is-denied/#:~:text=As%20the%20error%20says%20requested,or%20any%20other%20docker%20command.&text=Or%20you%20are%20not%20using%20the%20docker%20hub%20credentials%20correctly.)
Orchestration
[https://www.redhat.com/fr/topics/containers/what-is-container-orchestration](https://www.redhat.com/fr/topics/containers/what-is-container-orchestration)
Déployer Tomcat sur Kubernetes
[https://www.middlewareinventory.com/blog/deploy-tomcat-kubernetes/#Step4_Create_a_K8s_Deployment_to_Deploy_Tomcat_on_Kubernetes](https://www.middlewareinventory.com/blog/deploy-tomcat-kubernetes/#Step4_Create_a_K8s_Deployment_to_Deploy_Tomcat_on_Kubernetes)
Interet de kubernetes
[https://www.combell.com/fr/blog/quest-ce-que-kubernetes-et-pourquoi-ce-systeme-est-il-si-interessant/#:~:text=Kubernetes%20vous%20permet%20de%20g%C3%A9rer,on%20utilise%20davantage%20de%20serveurs.](https://www.combell.com/fr/blog/quest-ce-que-kubernetes-et-pourquoi-ce-systeme-est-il-si-interessant/#:~:text=Kubernetes%20vous%20permet%20de%20g%C3%A9rer,on%20utilise%20davantage%20de%20serveurs.)
autre alternative de kubernetes
[https://www.informatiquenews.fr/squarescale-presente-une-alternative-a-kubernetes-82773#:~:text=SquareScale%2C%20filiale%20de%20Sogilis%2C%20a,comme%20une%20alternative%20%C3%A0%20Kubernetes.](https://www.informatiquenews.fr/squarescale-presente-une-alternative-a-kubernetes-82773#:~:text=SquareScale%2C%20filiale%20de%20Sogilis%2C%20a,comme%20une%20alternative%20%C3%A0%20Kubernetes.)
installation de Minikube
[https://kubernetes.io/fr/docs/tasks/tools/install-minikube/](https://kubernetes.io/fr/docs/tasks/tools/install-minikube/)