GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment déployer des piles Docker Compose sur Kubernetes avec Kompose

Docker Compose vous permet de définir des piles de conteneurs que vous pouvez gérer collectivement. C'est un outil relativement simple qui se concentrait à l'origine sur les installations locales de Docker.

Kubernetes est un orchestrateur de conteneurs fourni avec sa propre chaîne d'outils et ses propres fichiers manifestes. Il est généralement considéré comme plus complexe qu'un flux de travail Docker classique, mais ses fonctionnalités facilitent les déploiements de conteneurs évolutifs en production.

Kompose est un outil qui vous permet de prendre des fichiers Docker Compose et de les déployer sur des clusters Kubernetes. Il est développé dans le cadre du projet Kubernetes.

Les versions actuelles de Kompose sont limitées aux conversions de fichiers YAML. Vous devez appliquer les manifestes de ressources Kubernetes convertis à votre cluster à l'aide d'un outil tel que Kubectl. Les anciennes versions de Kompose avaient un up intégré commande qui pourrait se déployer directement sur votre cluster sans étape de conversion intermédiaire. Cela a été supprimé en raison de la complexité technique croissante.

Mise en route

Kompose est disponible pour Windows, macOS et les distributions Linux les plus populaires. Des binaires pré-construits sont disponibles à partir de son référentiel GitHub. Téléchargez la dernière version, définissez le bit d'autorisation exécutable et déplacez le binaire dans un répertoire qui se trouve dans votre chemin. Plusieurs gestionnaires de packages sont également pris en charge.

curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o komposechmod +x komposesudo mv ./kompose /usr/local/bin/kompose 

Essayez d'exécuter kompose dans votre borne. Vous verrez des informations de base sur les commandes disponibles. Exécution de la kompose version vérifie la version de Kompose que vous utilisez.

Maintenant, assurez-vous que vous avez un docker-compose.yml dossier disponible. Voici un exemple basique qui configure un serveur Web Apache avec une base de données MySQL :

version :"3"services :apache :image :httpd:latest ports :- 80:80 mysql :image :mysql:latest expose :- 3306 volumes :- mysql:/var/lib/mysqlvolumes :mysql : 

Vous avez également besoin d'un cluster Kubernetes pour effectuer le déploiement. Créez un cluster avec un fournisseur de cloud public ou lancez le vôtre à l'aide d'un projet tel que MicroK8s.

Convertir votre pile

Le kompose convert La commande accepte le chemin d'accès à un fichier Docker Compose et émet des manifestes de ressources Kubernetes équivalents. Il utilise le docker-compose.yml dans votre répertoire de travail lorsqu'aucun chemin n'est donné. Plusieurs fichiers sont acceptés via le -f drapeau.

compose convert -f docker-compose.yml -f docker-compose-dev.yml

Vous verrez quelques lignes de sortie lorsque Kompose écrit des fichiers manifestes pour chacune des ressources de votre pile Compose. Des fichiers individuels sont créés pour chaque composant de votre docker-compose.yml . Ils seront placés dans votre répertoire de travail.

Voici le résultat de la conversion du docker-compose.yml ci-dessus :

Un déploiement et un service Kubernetes ont été créés pour chacun des services Compose. Ces ressources définissent les Pods à créer ainsi que leurs règles de routage réseau.

Un PersistentVolumeClaim existe également pour le conteneur MySQL. Cela représente le volume configuré dans le docker-compose.yml , fournissant un stockage persistant pour la base de données MySQL qui dure plus longtemps que n'importe quel pod individuel.

Si vous inspectez les fichiers YAML, vous verrez qu'il ne s'agit que de manifestes Kubernetes compatibles avec Kubectl. Voici le apache-deployment.yaml converti fichier :

apiVersion :apps/v1kind :Deploymentmetadata :annotations :kompose.cmd :kompose convert kompose.version : 1.23.0 (bc7d9f4f) creationTimestamp : null labels :io.kompose.service :apache name :apachespec :répliques :1 sélecteur :matchLabels :io.kompose.service :stratégie apache :{} modèle :métadonnées :annotations :kompose.cmd :kompose convert kompose.version :1.23.0 (bc7d9f4f) creationTimestamp :étiquettes nulles :io.kompose.service :spécification apache :conteneurs :- image :httpd:latest name :apache ports :- containerPort :80 ressources :{} restartPolicy :Alwaysstatus :{}

La spec du déploiement est assez similaire à la définition du conteneur Apache dans le docker-compose.yml d'origine . Dans le cas de ce service simple, il est facilement mappé à un objet Kubernetes. Le reste du fichier consiste principalement à définir des métadonnées, y compris des annotations spécifiques à Kompose qui vous permettent d'identifier les ressources créées avec l'outil.

Déploiement sur votre cluster

Déployez l'ensemble des fichiers manifestes de la manière habituelle avec kubectl apply . C'est une bonne idée de les stocker dans un répertoire séparé de votre docker-compose.yml , de sorte que kubectl n'essaie pas non plus de sélectionner ce fichier incompatible.

kubectl appliquer .

Les ressources seront provisionnées à l'intérieur de votre cluster. L'exécution de vos services peut prendre quelques minutes. Inspectez votre déploiement avec kubectl get deployments . Lorsque le AVAILABLE la colonne affiche 1 , votre charge de travail doit être accessible.

Maintenant, vous pouvez mettre à jour votre déploiement en modifiant les manifestes générés et en réexécutant kubectl apply . Si vous vouliez faire évoluer Apache vers trois répliques, vous ouvririez apache-deployment.yaml , modifiez les replicas champ à 3 , et appliquez le manifeste modifié.

Vous pouvez également continuer à mettre à jour votre fichier Docker Compose. Exécutez kompose convert à nouveau pour obtenir la dernière interprétation Kubernetes de son contenu, puis réappliquez la sortie à votre cluster. Sachez que cela écrasera toutes les modifications que vous avez appliquées manuellement depuis.

Limites

Kompose fonctionne généralement bien avec les fichiers Docker Compose en utilisant les fonctionnalités les plus courantes et les meilleures pratiques. Il peut créer des conteneurs, exposer des ports et fournir un stockage persistant via des volumes.

Cependant, toutes les conversions ne seront pas parfaites. Certaines fonctionnalités de composition n'ont pas d'équivalent direct dans le monde Kubernetes, tandis que d'autres seront mappées d'une manière qui pourrait ne pas répondre à vos besoins. L'utilisation de déploiements et de services dans cet exemple en est un. Si vous déployiez directement sur Kubernetes, vous pourriez utiliser une règle Ingress pour exposer votre service, mais cela n'est pas créé par Kompose. Les décisions avisées sont résolues en prenant l'option la plus simple.

Vous rencontrerez également des problèmes de volumes. Les fichiers Docker Compose peuvent lier les fichiers et dossiers de montage de l'hôte dans des conteneurs. Ce n'est pas possible avec Kubernetes, vous aurez donc besoin d'une solution alternative. De plus, bien que Kompose puisse créer des ressources pour PersistentVolumeClaims, il ne créera pas les PersistentVolumes réels. Vous devez disposer d'un volume déjà disponible dans votre cluster avant d'essayer de déployer vos manifestes.

Un tableau complet des fonctionnalités prises en charge et des détails de conversion est proposé dans le cadre de la documentation de Kompose. Il vaut la peine de vérifier que les fonctionnalités de Docker Compose que vous utilisez sont prises en charge avant de commencer tout effort de conversion.

Conclusion

Kompose simplifie la migration de Docker Compose vers un cluster Kubernetes. Il automatise les étapes qui étaient auparavant fastidieuses, chronophages et sujettes aux erreurs. C'est une bonne aide d'assistance, même si ce n'est pas un outil qui devrait être exécuté sans un certain degré de surveillance.

Les conversions Kompose ne sont pas universellement applicables, elles ne conviendront donc pas à tous les environnements. Il est toujours utile de vérifier les manifestes émis avant de les appliquer à votre cluster. Dans certains cas, il est préférable d'utiliser Kompose comme référence - convertissez votre docker-compose.yml , voyez le résultat, puis utilisez-le comme point de départ pour créer des manifestes entièrement compatibles avec votre application et votre cluster.


Docker
  1. Comment installer Jenkins avec Docker

  2. Comment déployer des microservices avec Docker

  3. Comment utiliser Docker Compose

  4. Comment déployer des applications avec Rancher

  5. Comment déployer un conteneur nginx avec Docker sur Linode

Comment déployer Kubernetes à nœud unique avec Microk8s sur Ubuntu 20.04

De Docker Compose à Kubernetes avec Podman

Comment exécuter Jenkins dans Docker à l'aide de Docker Compose avec des volumes

Comment installer Docker Compose sur Ubuntu

Comment déployer CouchDB en tant que cluster avec Docker

Comment déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose