Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
  1. Livres et vidéos
  2. Kubernetes
  3. Automatisation et publication d’une application
Extrait - Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (3e édition)
Extraits du livre
Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (3e édition) Revenir à la page d'achat du livre

Automatisation et publication d’une application

Objectifs du chapitre et prérequis

Le chapitre précédent a constitué une introduction à l’utilisation de Kubernetes avec notamment le recours au dashboard pour le déploiement d’une application.

Ce chapitre va reprendre cet exercice. La différence se fera sur le mode opératoire puisque les opérations seront réalisées en ligne de commande.

Gestion par kubectl d’une application

1. Suppression d’un déploiement

Durant le précédent chapitre, l’application Mailpit a été déployée à l’aide du dashboard. Même si vous ne l’avez pas fait, vous pouvez néanmoins suivre les instructions qui suivent.

Premier point, récupérer la liste des déploiements présents dans le serveur. Pour cela, il faut lancer la commande kubectl suivie du mot-clé get avec le type d’objet deployment. Ci-dessous la commande correspondante :

$ kubectl get deployment 

Ci-dessous le résultat renvoyé :

NAME      READY   UP-TO-DATE   AVAILABLE   AGE 
mailpit   1/1     1            1           8d 

La suppression du déploiement se fait à l’aide de la commande kubectl suivie des éléments suivants :

  • le mot-clé delete ;

  • le type d’objet à supprimer (deployment) ;

  • le nom de l’objet à supprimer (mailpit).

Ci-dessous la commande à lancer :

$ kubectl delete deployment mailpit 

Ci-dessous le résultat renvoyé par cette commande :

deployments.apps "mailpit" deleted 

La consultation de la liste des pods renverra alors le contenu suivant :

NAME                       READY   STATUS        RESTARTS   AGE 
mailpit-69bd8f74cb-kl9p5   1/1     Terminating   2          8d 

Au bout de quelques instants, la commande devrait renvoyer le message suivant :

No resources found. 

2. Création d’un déploiement

La commande kubectl, outre les opérations de consultation et de suppression, prend en charge la création d’objets. Dans le cas d’un déploiement, la commande doit être lancée avec les options suivantes :

  • le mot-clé create ;

  • le type d’objet à créer : deployment (ou le raccourci deploy) ;

  • le nom du déploiement (mailpit) ;

  • le nom de l’image à déployer avec l’option --image.

Ci-dessous la commande correspondant à ces indications :

$ kubectl create deployment mailpit --image=axllent/mailpit 

Ci-dessous le résultat...

Exposition de services

1. Pourquoi utiliser un service ?

Dans ce qui a précédé, l’application Mailpit a été accédée grâce au nom de son pod. Si le pod devait disparaître, le gestionnaire de déploiement procédera automatiquement à la création d’un nouveau pod. Malheureusement, le nom aura changé.

Afin de simplifier l’accès à un service hébergé dans un pod, il est nécessaire de passer par un nom de service. Le service remplira plusieurs rôles :

  • création d’une entrée DNS stable dans Kubernetes ;

  • mise à jour de l’entrée DNS du service en cas de changement de pod ;

  • répartition de la charge dans le cas où le déploiement procéderait à la création de plusieurs pods.

2. Exposition d’un déploiement via un service

La création d’un service se fait avec la commande kubectl suivie de :

  • l’instruction expose suivie du déploiement à exposer (sous la forme deployment/NOM_DEPLOIEMENT ;

  • la liste des ports à exposer avec l’option --port (1025 et 8025 dans le cas de Mailpit).

Ci-dessous la commande à lancer en fonction de ces instructions :

$ kubectl expose deployment/mailpit --port 1025,8025 

Et ci-dessous le résultat de cette commande :

service/mailpit exposed 

3. Vérification du service mailpit

Le service est maintenant créé, ce qui va se traduire par la création d’une nouvelle adresse DNS au sein du cluster Kubernetes. Cette dernière doit pointer sur le pod faisant tourner l’application Mailpit.

Malheureusement, depuis l’extérieur du cluster, il n’est pas possible d’interroger le serveur DNS de Kubernetes. Pour cela, il faut lancer une requête DNS depuis le pod de Mailpit en mode interactif.

Utilisez pour cela la commande kubectl ainsi que l’instruction exec. Cette dernière attend les options suivantes :

  • l’activation de stdin (option --stdin ou son raccourci -i) ;

  • l’utilisation d’un terminal avec stdin (option --tty ou son raccourci -t) ;

  • le nom du pod sur lequel lancer la commande ;

  • l’indicateur de fin des options (--) ;

  • enfin, la commande à lancer : un shell sh.

En résumant (et en concaténant...

Automatisation de déploiement par fichier YAML

1. Mécanisme de création et mise à jour

Dans les chapitres précédents, vous avez déployé l’application Mailpit avec les mécanismes suivants :

  • le dashboard de Kubernetes ;

  • la commande kubectl avec l’option create.

Pour ces deux mécanismes, une définition au format YAML a été envoyée dans l’API de Kubernetes de manière transparente.

Dans le cadre d’une découverte de Kubernetes, ce mécanisme est suffisant. Pour les opérations de mise à jour ou pour l’utilisation de fonctions avancées (déclaration de règles Ingress), il est préférable de connaître la structure réelle utilisée.

Dans ce qui va suivre, la commande kubectl avec l’option apply sera utilisée pour gérer les créations et mise à jour d’objet.

2. Structure YAML d’un déploiement

a. Quelques rappels

La commande kubectl peut être utilisée pour consulter les déploiements. L’option -o wide permettra d’obtenir des informations étendues sur les déploiements.

L’option describe fonctionne un peu de la même manière et permet d’obtenir des informations étendues sur les caractéristiques des objets.

b. Récupération d’une structure au format YAML

En plus de consulter les objets, l’option get permet de récupérer la définition des objets au format YAML (ou JSON). Pour cela, vous pouvez vous aider de l’option --output suivie du format attendu (la casse est insensible). Ainsi, l’extraction de la définition du déploiement de mailpit se fera à l’aide de la commande kubectl suivie des instructions suivantes :

  • la récupération des déploiements (get deployment) ;

  • le nom du déploiement (mailpit) ;

  • la spécification du format souhaité (-o yaml).

Ci-dessous la commande correspondante :

$ kubectl get deployment mailpit -o yaml 

Ci-dessous un extrait de cette définition :

apiVersion: apps/v1 
kind: Deployment 
metadata: 
 annotations: 
   deployment.kubernetes.io/revision: "1" 
 creationTimestamp: "2024-04-20T15:27:19Z" 
 generation: 4 
 labels:...

Ingress et reverse proxy

1. Origine du besoin

Dans les sections précédentes, vous avez déployé une application. Malheureusement, cette dernière n’est pas accessible depuis l’extérieur sauf à passer par la commande kubectl port-forward.

Heureusement, Kubernetes offre un mécanisme spécialement conçu pour ce type d’opération : les objets Ingress.

Ces derniers, tout comme les déploiements ou les services, se manipulent à l’aide de la commande kubectl et peuvent être listés (get), décrits (describe), créés (create) ou gérés automatiquement (apply).

2. Rôle d’un proxy inverse

En informatique, un proxy inverse désigne un composant qui va se placer en amont d’un autre afin d’étendre ses capacités. Il s’agit d’une architecture très communément déployée et qui est utilisée pour répondre aux problématiques suivantes :

  • accéder à un programme inaccessible directement depuis Internet ;

  • répartir la charge sur plusieurs serveurs ;

  • prendre en charge les opérations de chiffrement ou de compression ;

  • prendre en charge la gestion de la sécurité ;

  • mutualiser les accès et réduire l’utilisation d’adresses IP publiques.

Il existe de nombreux programmes sur le marché qui prennent en charge tout ou partie de ces fonctions : Apache, Nginx, Haproxy, Traefik, etc.

Chacun de ces outils a ses avantages ou inconvénients. Toutefois, ces aspects sont masqués par les couches d’abstraction de Kubernetes. Ce choix n’a donc généralement que peu d’impact.

Minikube dispose d’un contrôleur Nginx prêt à l’emploi par simple activation. C’est lui qui sera utilisé pour la suite du chapitre.

3. Activation du contrôleur Ingress dans Minikube

Première chose à faire si ce n’est pas encore le cas : activer le contrôleur Ingress par défaut de Minikube.

Tout comme pour les autres addons de Minikube, la commande minikube prendra en paramètre les éléments suivants :

  • l’option addons ;

  • l’action enable ;

  • enfin, le nom du plugin à activer : ingress.

Ci-dessous la commande correspondante :...