run - ¿Se pueden usar Kubernetes como Docker Compose?
run docker container on google cloud (4)
He estado investigando la documentación de Kubernetes durante horas. Entiendo el diseño central y la noción de servicios, controladores, pods, etc.
Sin embargo, lo que no entiendo es el proceso en el que puedo configurar declarativamente el clúster. Es decir, una forma de escribir un archivo de configuración (o un conjunto de ellos) para definir la composición y las opciones de escala de la implementación en la nube. Quiero poder declarar qué contenedores quiero en qué pods, cómo se comunicarán, cómo se escalarán, etc. sin ejecutar una tonelada de comandos cli.
¿Existe la funcionalidad de compilación docker-compose para Kubernetes?
Quiero que mi aplicación se defina en git, se controle la versión, sin depender de las interacciones cli manuales.
¿Es esto posible hacerlo de manera concisa? ¿Hay alguna referencia que sea más clara que la documentación oficial?
Docker ha anunciado oficialmente la funcionalidad
docker-compose
para el clúster kubernetes.
Entonces, a partir de ahora, puede componer los recursos de kubernetes en un archivo y aplicarlos utilizando ese único archivo.
Primero, necesitamos instalar el controlador Compose en Kubernetes en su clúster Kubernetes.
Este controlador utiliza los puntos de extensión estándar de Kubernetes para presentar
Stack
a la API de Kubernetes.
Consulte la documentación completa para instalar el controlador de composición docker:
Escribamos un simple archivo de componer 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
Luego usaremos el cliente de Docker para implementar esto en un clúster de Kubernetes que ejecute el controlador:
$ 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
Entonces podemos interactuar con esos objetos a través de la API de Kubernetes. Aquí puede ver que hemos creado los objetos de nivel inferior como Servicios, Pods, Implementaciones y ReplicaSets automáticamente:
$ 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
Es importante tener en cuenta que esta no es una conversión única. Compose on Kubernetes API Server presenta el recurso Stack en la API de Kubernetes. Por lo tanto, podemos consultar y administrar todo en el mismo nivel de abstracción que estamos creando la aplicación. Eso hace que profundizar en los detalles anteriores sea útil para comprender cómo funcionan las cosas o para solucionar problemas, pero no es necesario la mayoría de las veces:
$ kubectl get stack
NAME STATUS PUBLISHED PORTS PODS AGE
words Running 33000 5/5 4m
Kubernetes ciertamente tiene su propio yaml (como se muestra en " Implementación de aplicaciones ")
Pero como " Docker Clustering Tools Compared: Kubernetes vs Docker Swarm ", no fue escrito (solo) para Docker, y tiene su propio sistema.
Sin embargo, puede usar docker-compose para iniciar Kubernetes, como se muestra en "
vyshane/kid
": eso enmascara algunos de los
comandos de
kubectl
cli en scripts
(que se pueden versionar).
Si tiene archivos existentes de Docker Composer, puede echar un vistazo al proyecto Kompose .
kompose
es una herramienta para ayudar a los usuarios que están familiarizados con Docker-compose a moverse a Kubernetes. kompose toma un archivo Docker Compose y lo traduce en recursos de Kubernetes.
kompose
es una herramienta conveniente para pasar del desarrollo local de Docker a administrar su aplicación con Kubernetes. La transformación del formato Docker Compose en el manifiesto de recursos de Kubernetes puede no ser exacta, pero ayuda enormemente cuando se implementa por primera vez una aplicación en Kubernetes.
Para ejecutar el archivo
docker-compose.yaml
o el suyo, ejecute:
kompose up
Para convertir
docker-compose.yaml
en implementaciones y servicios de Kubernetes con un simple comando:
$ 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
Para obtener más información, consulte: http://kompose.io/
Si todavía está buscando, tal vez esta herramienta pueda ayudar: https://github.com/kelseyhightower/compose2kube
Puede crear un archivo de composición:
# sample compose file with 3 services
web:
image: nginx
ports:
- "80"
- "443"
database:
image: postgres
ports:
- "5432"
cache:
image: memcached
ports:
- "11211"
Luego use la herramienta para convertirlo en objetos kubernetes:
compose2kube -compose-file docker-compose.yml -output-dir output
Lo que creará estos archivos:
output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml
Luego puede usar
kubectl
para aplicarlos a kubernetes.