Cómo implementar Docker Compose Stacks en Kubernetes con Kompose – CloudSavvy IT

Ilustración que muestra los logotipos de Docker y Kubernetes

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 archivos 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 e implementarlos en clústeres de Kubernetes. Está desarrollado 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. Esta fue removido debido a la creciente complejidad técnica.

Empezando

Kompose está disponible para Windows, macOS y las distribuciones de Linux más populares. Los binarios prediseñados 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. Varios administradores de paquetes también son compatibles.

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. Corriendo kompose version comprueba la versión de Kompose que estás usando.

Ahora, asegúrate de tener un docker-compose.yml archivo disponible. Aquí hay un ejemplo básico que configura 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.

Conversión de su pila

El kompose convert El comando acepta la ruta a un archivo de Docker Compose y emite manifiestos de recursos de Kubernetes equivalentes. Usa 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 Compose. Se crean archivos individuales para cada componente de su docker-compose.yml. Se colocarán en su directorio de trabajo.

Aquí está el resultado de convertir el docker-compose.yml mostrado anteriormente:

Se ha creado una implementación y un servicio de Kubernetes para cada uno de los servicios de Compose. Estos recursos definen los pods a crear, así como sus reglas de enrutamiento de red.

También existe un PersistentVolumeClaim para el contenedor MySQL. Esto representa el volumen configurado en el docker-compose.yml, proporcionando almacenamiento persistente para la base de datos MySQL que dura más que cualquier Pod individual.

Si inspecciona los archivos YAML, verá que son solo manifiestos de Kubernetes compatibles con Kubectl normales. Aquí están los convertidos 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 la configuración de metadatos, incluidas las anotaciones específicas de Kompose que le permiten 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 almacenarlos en un directorio separado de su docker-compose.yml, así que eso kubectl no intenta elegir ese archivo incompatible también.

kubectl apply .

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

Ahora, puede actualizar su implementación editando los manifiestos generados y volviendo a ejecutar kubectl apply. Si quisiera escalar Apache a tres réplicas, abriría apache-deployment.yaml, cambiar el replicas campo a 3y aplique el manifiesto modificado.

También puede seguir actualizando su archivo Docker Compose. Correr kompose convert nuevamente para obtener la última interpretación de Kubernetes de su contenido y luego volver a aplicar la salida a su 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 capacidades de redacción no tienen un equivalente directo en el mundo de Kubernetes, mientras que otras se asignarán de una manera que podría no satisfacer sus necesidades. El uso de implementaciones y servicios en este ejemplo es uno de esos casos; si implementaras directamente en Kubernetes, podrías usar una regla de Ingress para exponer tu servicio, pero Kompose no la crea. Las decisiones con opiniones se resuelven tomando la opción más simple.

También se encontrará con problemas relacionados con los volúmenes. Los archivos de Docker Compose pueden vincular archivos y carpetas de montaje desde el host a 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 sus manifiestos.

Una tabla completa de funciones compatibles y detalles de conversión se ofrece 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 simplifica la migración de Docker Compose a un clúster de Kubernetes. Automatiza pasos que antes eran tediosos, lentos y propensos a errores. Es una buena ayuda de asistencia, aunque no es una herramienta que deba ejecutarse sin cierto 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 los manifiestos emitidos antes de aplicarlos a su clúster. En algunos casos, es mejor utilizar Kompose como referencia: convierta su docker-compose.yml, vea cuál es el resultado y luego úselo como punto de partida para construir manifiestos que sean totalmente compatibles con su aplicación y clúster.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad