Docker et Kubernetes
Tags: docker, kubernetes
Published: 2021-02-21 23:44:37

# [Devops with docker](https://devopswithdocker.com/)
...
## Partie 1 (exercice 1.13)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yn1nhrter31f1jc0p8lf.PNG)

### Code :
```docker
FROM openjdk:8

RUN apt-get  update  &&  apt-get  install  -y  git
RUN git clone https://github.com/docker-hy/spring-example-project.git

WORKDIR /spring-example-project

RUN ./mvnw package

CMD ["java" ,"-jar", "./target/docker-example-1.1.3.jar"]
```

---

## Partie 2 (exercice 2.7)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmxiqmo4f60s2drcpw2q.PNG)
### Code :
```yml
version: '3'

services:
  ml-kurkkumopo-training:
    image: deeq/ml-kurkkumopo-training
    volumes: 
      - model:/src/model
      - imgs:/src/imgs

  ml-kurkkumopo-frontend:
    ports:
      - 3000:3000
    restart: unless-stopped
    image: deeq/ml-kurkkumopo-frontend
  ml-kurkkumopo-backend:
    ports: 
      - 5000:5000
    image: xbexbex/ml-kurkkumopo-backend
    volumes: 
      - model:/src/model
volumes: 
  model:
  imgs:
```

---

# Kubernetes

## C'est quoi?

Tout d'abord, Kubernetes, ou encore k8s, est un plateforme libre de droits qui permet d'automatiser l'exploitation de `container` Linux. 

Cet outil aide notamment à supprimer certains processus fait habituellement de façon manuelle, tel que la mise à l'échelle des applications dans des `container` ou encore la gestion de version (s'assurer que l'application est déployé de la même façon que durant nos test) et j'en passe.

Kubernetes offre des outils d'orchestration (services de mise en réseau, de stockage, de sécurité, de télémétrie) qui nous aiderons à déployer des applications qui s'étendent sur plusieurs `container` et à gérer la sécurité celles-ci plus efficacement. Ces applications conteneurisées pourront, grâce à Kubernetes, être déployée à grande échelle de façon automatisée.

Voici un bref résumé de ce que l'on peut faire avec k8s ([source](https://www.redhat.com/fr/topics/containers/what-is-kubernetes)):
1. « orchestrer des conteneurs sur plusieurs hôtes
2. optimiser l'utilisation de votre matériel afin de maximiser les ressources requises pour l'exécution de vos applications d'entreprise
3. contrôler et automatiser les déploiements et mises à jour d'applications
4. monter et ajouter des systèmes de stockage pour exécuter des applications avec état
5. mettre à l'échelle des applications conteneurisées et leurs ressources à la volée
6. gérer des services de façon déclarative et garantir ainsi que les applications déployées s'exécutent toujours de la manière dont vous les avez déployées
7. vérifier l'intégrité de vos applications et les réparer automatiquement grâce au placement, au démarrage, à la réplication et à la mise à l'échelle automatiques. »

## Lexique

**Master** : c'est un server contrôlant les nœuds Kubernetes.

**Nœuds** : ce sont des machines qui exécutent des tâches qui leurs ont été attribuées (un nœud peut être une machine virtuelle ou une machine physique).

**Cluster** : c'est un ensemble de machines (nœuds) qui nous permettent d'exécuter des applications conteneurisée (il contient au minimum un nœud de calcul et un nœud de gestion).

**Pod** : c'est un ou plusieurs `container` qui sont déployés sur un seul nœud (machine) partageant ainsi la même adresse IP, le même IPC, le même nom d'hôte ainsi que d'autres ressources.
Il permet de déplacer les `container` facilement au sein d'un cluster.

**vContrôleur de réplication** : il s'occupe de vérifier le nombre de copies identiques d'un pod qui doivent s'exécuter dans le cluster.

**Service** : il sert à dissocier les définitions de tâche des pods, c'est-à-dire qu'il transfère automatiquement les requêtes de service vers le pod adéquat.

**Kubelet** : c'est un service qui s'exécute sur des nœuds et qui lit les `manifest` (genre de log) afin de s'assurer que les `container` ont démarrés et sont fonctionnels.

**vkubectl** : c'est un outil de configuration en ligne de commande de Kubernetes (`kubectl`).

## Tutoriel
1.  [Tutoriel interactif](https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/) (officiel) de Kubernetes couvrant de la création d'un container à la mise à jour d'une application.
2. [Tutoriel sur le fonctionnement de Kubernetes](https://www.youtube.com/watch?v=Mn6Jc0AOUTE&ab_channel=edureka%21)
3. [Tutoriel](https://www.youtube.com/watch?v=z8U2x1TCPis&ab_channel=Samjhana) sur le déploiement d'un `container` dans lequel se trouve une page `index.php` (classique `Hello world`)

Pour ma démo, j'ai choisi le troisième :
![indexphp](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtbb7homtfky6g9j13mj.PNG)
![Capture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/inuaaxrj3tmt3rf5rhsf.PNG)
![Capture 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wvok4ofd91h0morc0m3c.PNG) 
![expose service](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/saoh5evu6ajeijxfzqy9.PNG)
![pods and deploy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifoxvg6jcpfd0cq1umvh.PNG)
![svc](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kr7kbvy6pxvhs8957dnd.PNG)
![deploy result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k648ylls0jw5gpeh2nsa.PNG)