Cómo implementar pilas de Docker Compose en Kubernetes con Kompose

Docker Compose le permite definir pilas de contenedores que puede administrar colectivamente. Es una herramienta relativamente simple que originalmente se centró en las instalaciones locales de Docker.

Kubernetes es un orquestador de contenedores que viene con su propia cadena de herramientas y archivo de manifiesto. Por lo general, se considera más complejo que un flujo de trabajo de Docker normal, pero sus capacidades facilitan las implementaciones de contenedores escalables en producción.

Kompose es una herramienta que le permite tomar archivos de Docker Compose y distribuirlos entre los clústeres de Kubernetes. Se desarrolla como parte del proyecto Kubernetes.

Las versiones actuales de Kompose están limitadas a las conversiones de archivos YAML. Debe aplicar los manifiestos de recursos de Kubernetes convertidos a su clúster mediante una herramienta como Kubectl. Las versiones anteriores de Kompose tenían un up comando que podría implementarse directamente en su clúster sin un paso de conversión intermedio. Esto se ha eliminado debido a la creciente complejidad técnica.

Índice de contenidos
  1. Para comenzar
  2. Convirtiendo tu pila
  3. Implementación en su clúster
  4. Limitaciones
  5. Conclusión

Para comenzar

Kompose está disponible para Windows, macOS y las distribuciones de Linux más populares. Los binarios precompilados están disponibles en su repositorio de GitHub. Descargue la última versión, establezca el bit de permiso ejecutable y mueva el binario a un directorio que esté en su ruta. También se admiten varios administradores de paquetes.

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

Intenta correr kompose en tu terminal. Verá información básica sobre los comandos disponibles. Raza kompose version compruebe la versión de Kompose que está utilizando.

Ahora, asegúrate de tener un docker-compose.yml archivo disponible. Aquí hay un ejemplo básico de configuración de un servidor web Apache con una base de datos MySQL:

version: "3"

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

volumes:
  mysql:

También necesita un clúster de Kubernetes para implementar. Cree un nuevo clúster con un proveedor de nube pública o cree el suyo propio con un proyecto como MicroK8s.

Convirtiendo tu pila

El kompose convert El comando acepta la ruta de un archivo de Docker Compose y emite manifiestos de recursos de Kubernetes equivalentes. Utilizar el docker-compose.yml en su directorio de trabajo cuando no se proporciona ninguna ruta. Se aceptan varios archivos a través del -f bandera.

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

Verá algunas líneas de salida a medida que Kompose escribe archivos de manifiesto para cada uno de los recursos en su pila de Compose. Se crean archivos individuales para cada componente suyo docker-compose.yml. Se colocarán en su directorio de trabajo.

Aquí está el resultado de la conversión de docker-compose.yml indicado arriba:

Se ha creado una distribución y un servicio de Kubernetes para cada uno de los servicios de Compose. Estos recursos definen los pods que se crearán y sus reglas de enrutamiento de red.

También hay un PersistentVolumeClaim para el contenedor MySQL. Representa el volumen configurado en el docker-compose.yml, proporcionando almacenamiento persistente para la base de datos MySQL que sobrevive a cualquier Pod.

Si observa los archivos YAML, verá que son solo un manifiesto normal de Kubernetes compatible con Kubectl. Aquí está el convertido apache-deployment.yaml expediente:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.23.0 (bc7d9f4f)
  creationTimestamp: null
  labels:
    io.kompose.service: apache
  name: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: apache
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.23.0 (bc7d9f4f)
      creationTimestamp: null
      labels:
        io.kompose.service: apache
    spec:
      containers:
        - image: httpd:latest
          name: apache
          ports:
            - containerPort: 80
          resources: {}
      restartPolicy: Always
status: {}

El despliegue spec es bastante similar a la definición del contenedor Apache en el original docker-compose.yml. En el caso de este servicio simple, se asigna fácilmente a un objeto de Kubernetes. El resto del archivo consiste principalmente en configurar los metadatos, incluidas las anotaciones específicas de Kompose que ayudan a identificar los recursos creados con la herramienta.

Implementación en su clúster

Implemente el conjunto de archivos de manifiesto de la forma habitual con kubectl apply. Es una buena idea guardarlos en un directorio separado del suyo. docker-compose.yml, así que eso kubectl no intente seleccionar ese archivo incompatible también.

kubectl apply .

Los recursos se proporcionarán dentro de su clúster. Los servicios pueden tardar unos minutos en ejecutarse. Inspeccione su distribución con kubectl get deployments. Cuando el AVAILABLE muestra la columna 1, su carga de trabajo debe ser accesible.

Ahora puede actualizar su distribución editando el manifiesto generado y ejecutándolo nuevamente kubectl apply. Si quisiera cambiar el tamaño de Apache a la replicación triple, abriría apache-deployment.yaml, cambiar el replicas campo a 3y aplicar el manifiesto modificado.

También puede continuar actualizando su archivo Docker Compose. Correr kompose convert nuevamente para obtener la última interpretación de Kubernetes de su contenido, luego vuelva a aplicar la salida al clúster. Tenga en cuenta que esto sobrescribirá cualquier cambio que haya aplicado manualmente desde entonces.

Limitaciones

Kompose generalmente funciona bien con archivos de Docker Compose utilizando las funciones más comunes y las mejores prácticas. Puede crear contenedores, exponer puertos y proporcionar almacenamiento persistente a través de volúmenes.

Sin embargo, no todas las conversiones serán perfectas. Algunas funciones de Compose no tienen un equivalente directo en el mundo de Kubernetes, mientras que otras se asignarán de una manera que puede no satisfacer sus necesidades. El uso de distribuciones y servicios en este ejemplo es uno de esos casos: si está implementando directamente en Kubernetes, podría usar una regla de Ingress para exponer su servicio, pero Kompose no la crea. Las supuestas decisiones se resuelven tomando la opción más simple.

También encontrará problemas relacionados con el volumen. Los archivos de Docker Compose pueden asignar archivos y carpetas de montaje desde el host a los contenedores. Esto no es posible con Kubernetes, por lo que necesitará una solución alternativa. Además, aunque Kompose puede crear recursos para PersistentVolumeClaims, no creará los PersistentVolumes reales. Deberá tener un volumen ya disponible dentro de su clúster antes de intentar implementar su manifiesto.

Se ofrece una tabla completa de características compatibles y detalles de conversión como parte de la documentación de Kompose. Vale la pena verificar que las funciones de Docker Compose que usa sean compatibles antes de comenzar cualquier esfuerzo de conversión.

Conclusión

Kompose facilita la migración de Docker Compose a un clúster de Kubernetes. Automatice pasos que antes eran tediosos, lentos y propensos a errores. Es una buena ayuda, aunque no una herramienta que deba realizarse sin algún grado de supervisión.

Las conversiones de Kompose no son de aplicación universal, por lo que no serán adecuadas para todos los entornos. Siempre vale la pena verificar el manifiesto emitido antes de aplicarlos al clúster. En algunos casos, es mejor usar Kompose como referencia: convierta el suyo docker-compose.yml, vea cuál es el resultado y luego utilícelo como punto de partida para crear manifiestos que sean totalmente compatibles con la aplicación y el clúster.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir Change privacy settings