Comment déployer des applications dans Kubernetes

Publié: 2022-11-09

Kubernetes est l'une des plates-formes d'automatisation les plus populaires pour le déploiement, la mise à l'échelle et l'exploitation de conteneurs d'applications sur un cluster d'hôtes ou de nœuds.

Cet article traite de l'un des objets centraux de Kubernetes : le déploiement. L'objectif est de comprendre son comportement et comment le créer, le mettre à jour et le supprimer.

Qu'est-ce qu'un déploiement ?

Un déploiement est l'un des objets utilisés pour lancer des pods. Les bonnes pratiques Kubernetes encouragent l'utilisation de déploiements pour les applications sans état. Sans déploiement, vous auriez besoin de créer, mettre à jour et supprimer manuellement plusieurs pods, ce qui serait fastidieux et impossible pour de nombreux pods.

Un déploiement déclare un seul objet dans YAML qui non seulement crée les pods, mais garantit également qu'ils sont à jour et en cours d'exécution. Vous pouvez également facilement mettre à l'échelle automatiquement vos applications à l'aide d'un déploiement sur Kubernetes. Ainsi, un déploiement est utilisé pour mettre à l'échelle, déployer et restaurer des versions de vos applications dans des pods.

Un déploiement indique également à Kubernetes le nombre de copies d'un pod que nous voulons exécuter, et Kubernetes s'occupe du reste. Le contrôleur associé créera un ReplicaSet à partir de votre configuration lors de la création d'un déploiement. Le contrôleur associé au ReplicaSet créera une série de pods à partir de la configuration du ReplicaSet.

Les avantages d'utiliser un déploiement au lieu de créer directement un ReplicaSet sont :

  • Historisation de l'objet : chaque modification de l'objet (via un "apply" ou un "edit") créera une sauvegarde de la version précédente.
  • Gestion du rollout et du rollback : Vous pouvez revenir sur une configuration en lien avec le point précédent.

Création d'un déploiement

Il existe deux méthodes que nous pouvons utiliser pour créer un déploiement Kubernetes :

Méthode impérative

Les API Kubernetes permettent une approche plus directe et impérative sans nécessiter de fichiers de configuration ou de manifestes au format YAML. Dans cette approche, tout ce que nous avons à faire est de dire ce que nous voulons faire, et Kubernetes se chargera de définir ce qui doit être fait pour atteindre le résultat attendu.

Pour utiliser la méthode impérative, utilisez simplement la commande ci-dessous :

 kubectl create deployment nginx-deployment --image nginx --port=80

Méthode déclarative

Dans cette méthode, vous devez tout déclarer, et lorsque vous utilisez ce code, Kubernetes lit simplement vos définitions et crée exactement comme présenté ou déclaré.

Pour utiliser le déploiement déclaratif, vous devrez créer un fichier YAML.

Fichier YAML pour le déploiement avec le nom new_deployment.yaml :

 apiVersion: apps/v1 kind: Deployment metadata:  name: nginx-deployment spec:  #Specifies the number of Pod Copies  replicas: 3 #Selects the Pod to be managed by the deployment  selector:    #Matches the defined labels    matchLabels:      deploy: example  template:    metadata:      #Specifies the labels on the Pod.       labels:         deploy: example    spec:      containers:        - name: nginx          image: nginx:1.20.2

Dans ce fichier YAML, après avoir défini la version de l'API Kubernetes, le type d'objet que vous créez et le nom du déploiement, il y a la section spec. Dans cette section, vous définissez d'abord la clé des répliques, qui indique le nombre d'instances de pod que le déploiement doit garder actives.

Utilisez un libellé de sélecteur pour identifier les pods dans le déploiement. Pour cela, vous pouvez utiliser l'étiquette de déploiement, qui indique que tous les pods correspondant à ces étiquettes sont regroupés dans le déploiement.

Après cela, vous avez l'objet modèle où vous avez un modèle de pod dans votre spécification de déploiement. Lorsque le déploiement crée des pods, il les crée à l'aide de ce modèle. La spécification d'un pod standard se trouve sous la clé de modèle.

Avec ce déploiement, les images Nginx avec des étiquettes seront déployées sur les pods. De plus, il faut aussi faire attention sur ce point, et le Pod est l'unité de scalabilité dans Kubernetes, il faut donc réfléchir au pattern que l'on souhaite utiliser si l'on met plusieurs conteneurs dans le même Pod.

Ensuite, appliquez le fichier Yaml new_deployment.yaml , utilisez la commande suivante :

 kubectl apply -f new_deployment.yaml

Après quelques secondes, vous pouvez obtenir l'état du déploiement en utilisant ce qui suit :

 kubectl get all
déployer

Récupérer et mettre à jour le déploiement

Notez que vous avez créé les pods, le déploiement et également un Replicaset. Ainsi, un déploiement crée et gère toujours un Replicaset. Vous pouvez maintenant utiliser la commande suivante pour décrire le déploiement :

 kubectl describe deployment nginx-deployment
décris

Vous avez maintenant une description complète du déploiement. Il met en évidence la stratégie utilisée pour créer/reconstruire les pods lorsqu'une mise à jour a été définie comme RollingUpdate.

La stratégie RollingUpdate permet une migration ordonnée d'une version d'une application vers une version plus récente. C'est la stratégie par défaut utilisée dans Kubernetes.

En plus de cela, nous avons également les stratégies suivantes :

  • Recréer : termine les instances de pod en cours d'exécution et les "recrée" avec la nouvelle version ;
  • Bleu/Vert : Cette stratégie crée deux environnements distincts mais identiques. Dans l'environnement bleu, l'application s'exécute telle quelle, tandis que dans l'environnement vert, l'application s'exécute telle qu'elle sera à l'avenir ;
  • Canary : une stratégie de déploiement dans laquelle un sous-ensemble d'utilisateurs est impliqué dans la version incrémentielle d'une application ou d'un service.

Si vous optez pour la "mise à jour continue", vous pouvez configurer son comportement sur le nombre de répliques souhaitées.

  • maxSurge vous permet d'indiquer (en pourcentage ou en termes absolus) combien de pods il peut créer en plus du nombre de réplicas actuellement configurés.
  • maxUnavailable permet d'indiquer (en pourcentage ou en absolu) combien de Pods peuvent être « indisponibles » lors de la mise à jour, en fonction du nombre de réplicas configurés.

Selon votre application et votre autoscaler, ces configurations vous permettront d'assurer la QoS ou d'accélérer vos déploiements.

Ensuite, vous devez redimensionner les pods à 10 et modifier la balise d'image Nginx pour la plus récente.

 kubectl scale deployment nginx-deployment --replicas=10
échelle-1

Notez que nous avons 5 conteneurs en cours de création, et sur 10 Pods, nous en avons 5 disponibles.

Après quelques secondes, utilisez la commande suivante :

 kubectl get all

Ici, vous pouvez voir que tous les pods ont été créés et que les conteneurs sont en cours d'exécution.

tout-1

Suppression de votre déploiement

Pour supprimer un déploiement Kubernetes, vous pouvez utiliser les commandes suivantes :

 kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml

Helm : Simplifier les déploiements

Lorsque l'on veut déployer une application complexe qui utilise des dizaines voire des centaines de ressources Kubernetes, l'outil kubectl devient inadapté, c'est pourquoi l'outil Helm a été développé. Helm est un gestionnaire de packages pour Kubernetes qui s'appuie sur kubectl et simplifie les déploiements d'applications.

Dans le vocabulaire Helm, une application est appelée une release. Il est associé à un graphe, c'est-à-dire un ensemble de fichiers de configuration au format YAML contenant des variables globales et des templates décrivant les ressources Kubernetes.

Conclusion

Le déploiement est un objet Kubernetes essentiel. Comme un grand pouvoir implique une grande responsabilité, vous devez être prudent lors de sa configuration ou risquer d'avoir des comportements inattendus. Pour aller plus loin dans les configurations de déploiement, vous pouvez vous référer à la documentation Kubernetes.

Vous pouvez également explorer certains des meilleurs tutoriels Kubernetes pour apprendre à partir de zéro et devenir un expert.