Je fouille dans la documentation de Kubernetes depuis des heures. Je comprends la conception de base et la notion de services, de contrôleurs, de modules, etc.
Ce que je ne comprends pas, cependant, est le processus dans lequel je peux configurer le cluster de manière déclarative. C’est un moyen pour moi d’écrire un fichier de configuration (ou un ensemble de celui-ci) pour définir la composition et les options de mise à l’échelle du déploiement en nuage. Je veux pouvoir déclarer quels conteneurs je veux dans quels pods, comment ils vont communiquer, comment ils vont évoluer, etc. sans exécuter une tonne de commandes cli.
Existe-t-il une fonctionnalité docker-compose pour Kubernetes?
Je souhaite que mon application soit définie dans git, à contrôler sa version, sans recourir à des interactions cli manuelles.
Est-ce possible de le faire de manière concise? Existe-t-il une référence plus claire que la documentation officielle?
Docker a officiellement annoncé le docker-compose
fonctionnalité pour le cluster kubernetes. Donc, à partir de maintenant, vous pouvez composer les ressources kubernetes dans un fichier et les appliquer en utilisant ce fichier unique.
Nous devons d’abord installer le contrôleur Compose on Kubernetes dans votre cluster Kubernetes. Ce contrôleur utilise les points d’extension Kubernetes standard pour introduire le Stack
à l’API Kubernetes. Consultez la documentation complète pour installer le contrôleur de composition de docker:
Ecrivons un simple fichier yaml:
version: "3.7"
services:
web:
image: dockerdemos/lab-web
ports:
- "33000:80"
words:
image: dockerdemos/lab-words
deploy:
replicas: 3
endpoint_mode: dnsrr
db:
image: dockerdemos/lab-db
Nous utiliserons ensuite le client Docker pour le déployer sur un cluster Kubernetes exécutant le contrôleur:
$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml words
Waiting for the stack to be stable and running...
db: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
web: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
words: Ready [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
Stack words is stable and running
Nous pouvons ensuite interagir avec ces objets via l'API Kubernetes. Vous pouvez voir ici que nous avons créé automatiquement les objets de niveau inférieur tels que Services, Pods, Deployments et ReplicaSets:
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/db 1 1 1 1 57s
deployment.apps/web 1 1 1 1 57s
deployment.apps/words 3 3 3 3 57s
Il est important de noter que cette conversion n’est pas unique. Le serveur API Compose on Kubernetes introduit la ressource Stack dans l'API Kubernetes. Nous pouvons donc interroger et gérer tout au même niveau d’abstraction que lors de la construction de l’application. Il est donc utile de fouiller dans les détails ci-dessus pour comprendre le fonctionnement des choses ou résoudre les problèmes de débogage, mais ce n’est pas nécessaire la plupart du temps:
$ kubectl get stack
NAME STATUS PUBLISHED PORTS PODS AGE
words Running 33000 5/5 4m
Si vous cherchez toujours, cet outil peut peut-être vous aider: https://github.com/kelseyhightower/compose2kube
Vous pouvez créer un fichier de composition:
# sample compose file with 3 services
web:
image: nginx
ports:
- "80"
- "443"
database:
image: postgres
ports:
- "5432"
cache:
image: memcached
ports:
- "11211"
Puis utilisez l'outil pour le convertir en objets kubernetes:
compose2kube -compose-file docker-compose.yml -output-dir output
Qui va créer ces fichiers:
output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml
Ensuite, vous pouvez utiliser kubectl
pour les appliquer aux kubernetes.
Si vous avez déjà des fichiers Docker Composer, vous pouvez consulter le projet Kompose .
kompose
est un outil destiné à aider les utilisateurs familiarisés avec Docker-Composition à migrer vers Kubernetes. kompose prend un fichier Docker Compose et le traduit en ressources Kubernetes.
kompose
est un outil pratique qui permet de passer du développement local de Docker à la gestion de votre application avec Kubernetes. La transformation du format Docker Compose en manifeste de ressources Kubernetes n'est peut-être pas exacte, mais elle aide énormément lors du premier déploiement d'une application sur Kubernetes.
Courir docker-compose.yaml
ou votre propre fichier, lancez:
kompose up
Convertir docker-compose.yaml
dans les déploiements et services Kubernetes avec une simple commande:
$ kompose convert -f docker-compose.yaml
INFO Kubernetes file "frontend-service.yaml" created
INFO Kubernetes file "redis-master-service.yaml" created
INFO Kubernetes file "redis-slave-service.yaml" created
INFO Kubernetes file "frontend-deployment.yaml" created
INFO Kubernetes file "redis-master-deployment.yaml" created
INFO Kubernetes file "redis-slave-deployment.yaml" created
Pour plus d'informations, consultez: http://kompose.io/
Kubernetes a certainement son propre yaml (comme indiqué dans " Déploiement d'applications ")
Mais comme " Comparaison des outils Docker: Kubernetes vs Docker Swarm ", cela n’a pas été écrit (uniquement) pour Docker, et il a son propre système.
Vous pouvez utiliser docker-compose pour démarrer Kubernetes, comme indiqué dans " vyshane/kid
": cela masque une partie des kubectl
commandes dans les scripts (qui peut être versionné).