Sélectionner une page

Formation > Blog > Kubernetes > Migrer de Docker Compose à Kubernetes

Migration de Docker Compose vers Kubernetes

Lors du développement d‘applications, la conteneurisation des composants est la première étape du déploiement et par conséquent une étape cruciale dans le bon fonctionnement de celles-ci. En tant que développeur, vous êtes probablement familier avec deux des solutions les plus utilisées : Docker et Kubernetes.

Dans cet article, nous allons voir pourquoi Kubernetes est souvent préféré à Docker Compose par les organisations du monde entier pour la gestion de leurs clusters applicatifs et comment transférer vos composants de Docker Compose à Kubernetes.

Pour une maitrise complète de l’outil, suivez notre formation Kubernetes. Il s’agit d’une formation complète lors de laquelle vous apprendrez à automatiser le déploiement, la mise à l’échelle et la gestion d’applications de manière conteneurisée.


Si vous êtes déjà expert de l’outil, la formation Kubernetes avancé vous apprendra à faire évoluer vos applications vers le standard micro-service, modulaire et scalable.

L’équipe Ambient IT

Docker Compose Vs Kubernetes

Kubernetes et docker compose sont tous deux des frameworks permettant d’organiser des conteneurs applicatifs. Si les deux outils présentent des inconvénients et des avantages, Kubernetes s’est rapidement imposé comme leader du marché, car plus simple d’utilisation et plus fiable.

Docker Compose

Docker Compose est une fonctionnalité de Docker qui est un outil open-source de conteneur applicatif. Lancé en 2013, Compose tend à simplifier le workflow des applications multiconteneurs. Avec les fichiers YAML, il est possible de mettre en place des commandes groupées pour tous les services de vos applications, fluidifiant ainsi toutes les taches. Compose fonctionne avec tous les environnements y compris la production, le stagging et l’intégration continue.

Compose est populaire pour organiser des services en local, il peut configurer toutes les dépendances des services de l’application. Cela permet de créer des tests automatisés.

Pour l’orchestration réseaux, c’est Docker Swarm qui prend le relais et dont les fonctionnalités ne sont pas aussi avancées que Kubernetes.

Les avantages de Kubernetes

La grande différence entre Docker et Kubernetes vient de la capacité de ce dernier à exécuter les environnements applicatifs sur plusieurs machines physiques comme virtuelles là où Docker ne peut exécuter ses tâches que sur une seule machine.

Kubernetes permet de résoudre une multitude de problèmes liés à l’administration réseau :

  • L’optimisation des ressources
  • L’auto-réparation des conteneurs
  • Réduire le temps d’arrêt lors du déploiement des applications
  • La mise à l’échelle automatique

Kubernetes facilite le déploiement de conteneurs isolés dont les ressources sont toujours disponibles de façon optimale.

Avec son excellente fiabilité et tolérances aux pannes, c’est une plateforme robuste qui est adaptée aux besoins des organisations ayant besoin de diriger un nombre important de services et d’applications.

La gestion les déploiements hybrides et multiclouds est optimisée en plus de fournir d’excellents outils de monitoring pour les performances et la gestion des erreurs.

Apprenez comment transférer vos ressources docker compose dans K8s

Migrer de Docker Compose à Kubernetes

Migrer de Docker Compose à Kubernetes est une tâche qui peut être effectuée de différentes manières

Migration Manuelle

Commencez par supprimer la database Mongo de Docker :

  • Trouvez le container shell de Mongo dans Docker : docker exec -it velocity_database_1 bash
  • mongodump pour supprimer les données
  • Sortez de la base de données Mongo
  • Copiez le dossier dump hors du conteneur de la base de données Mongo : docker cp velocity_database_1:/dump

Vous pouvez maintenant mettre en place Mongo dans Kubernetes

  • Installez la charte Helm de MongoDB avec un mot de passe root de votre choix : helm install –set mongodbRootPassword= –name velocity-mongo stable/mongodb
  • Ouvrez un shell à l’intérieur du Pod Mongo : kubectl exec -it –namespace default svc/velocity-mongo-mongodb /bin/bash
  • Ouvrez une session Mongo Shell un nom d’utilisateur root et choisissez un mot de passe : mongo admin -u root -p
  • Créez un nom d’utilisateur non root pour accéder à IBM Urban code velocity. Sortez de Mongo
db.createUser
({
user: "<NEW_USERNAME>", 
pwd: "<NEW_PASSWORD>", 
roles: [{role: "readWriteAnyDatabase", 
db: "admin"}, {role: "dbAdminAnyDatabase", 
db: "admin"}, {role: "clusterAdmin", 
db: "admin"
}]})

Il faut maintenant restaurer le dossier dump de la base de données dans le Pod MongoDB

  • Utilisez Kubelct pour obtenir tous les pods. Identifiez le pod MongoDB et collez dossier dump : kubectl cp :/tmp/dump
  • Naviguez vers le pod Shell MongoDB : kubectl exec -it –namespace default svc/velocity-mongo-mongodb /bin/bash
  • Changez le répertoire pour le répertoire dump : cd /tmp/dump
  • Listez tous les dossiers MongoDB : ls
  • Restaurez toute la base de données SAUF cla ADMIN : mongorestore –uri= »mongodb://:@localhost:27017/?authSource=admin » -d
  • Quittez le pod MongoDB

L’étape suivante demande de configurer le certificat SSL

  • Créez un fichier velocity-secret.yml
apiVersion: v1
data:
  tls.crt: <BASE64_CERT>
  tls.key: <BASE64_KEY>
kind: Secret
metadata:
  name: velocitytls
  namespace: default
type: Opaque
  • Encodez les fichiers de certificats et de clés et enregistrez-les dans le fichier requis : cat .pem | base64
  • Appliquer le velocity-secret.yml : kubectl apply -f velocity-secret.yml

Il faut ensuite configurer Kubernetes Ingress

  • Appliquez les fichiers Ingress-Nginx.yml générés par le cloud
    • ubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
    • kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/cloud-generic.yaml

L’étape finale consiste à installer IBM UrbanCode Velocity.

  • Assurez-vous que le fichier JSON est disponible dans le répertoire ~/.ucv
  • Exécutez l’installateur velocity. Tous les champs reprennent le fichier JSON. Selectionnez Kubernetes pour générer une charte Helm tgz
  • Utilisez cette charte pour installer velocity
  • Installez IBM UrbanCode Velocity
helm install 
--set license=accept 
--set url.domain=<HOSTNAME> 
--set mongo.url=mongodb://<NEW_USERNAME>:<NEW_PASSWORD>@velocity-mongo-mongodb:27017/?authSource=admin 
--name velocity <VELOCITY_HELM_CHART>

Migration avec Kompose

Kompose est un outil permettant de simplifer la migration de Docker à Kubernetes. Il s’agit d’un outil open source créé par la communauté et updaté de manière régulière depuis 5 ans. Il permet de transformer des fichiers docker-compose.yaml en manifestes Kubernetes. C’est un outil utile, mais il ne doit pas être seul responsable du déploiement des applications sur le cluster.

Kompose ne génère pas de fichier pour la déclaration des Persistant Volume. Ils doivent donc être configurés à part et sont donc dissociés de la partie applicative. Si cette étape est mal faite, cela peut entrainer des erreurs dans le déploiement des pods.

Utiliser cette solution empêche également le fonctionnement d’Ingress control qui est le proxy faisant tampon entre les clusters et le monde extérieur. Kompose ne reconnait pas les ressources de ce type et émule une configuration Traefik à la place. Cela peut entrainer un déséquilibre entre vos différents clusters. Les ressources nécessaires au debug seront alors plus difficiles à trouver.

De manière générale, Kompose permet de créer des manifestes Kubernetes prêt l’emploi à partir de Docker Compose. Comme tout outil générateur de code, son utilisation peut s’avérer inadaptée à vos besoins réels. Intégrer Kompose dans vos processus de CI/CD automatisé n’est pas une bonne utilisation de l’outil et vous devez en réserver l’usage à vos workflow PoC.

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp