¿Hay alguna manera de configurar Skaffold para construir imágenes en mi daemon Docker local y no en el minikube?

Uso minikube con controlador Docker en Linux. Para un flujo de trabajo manual puedo habilitar addon de registro en minikube, empujar allí mis imágenes y referirse a ellas en el archivo de configuración de implementación simplemente como localhost:5000/anything. Luego se tiran al entorno de un minikube por su daemon Docker y las implementaciones comienzan exitosamente aquí. Como resultado obtengo todas las imágenes de base guardadas sólo en mi dispositivo local (como construyo mis imágenes usando mi daemon Docker local) y el ambiente de minikube se estremece sólo por imágenes que son tiradas por su daemon Docker.

¿Puedo implementar el mismo flujo de trabajo cuando use Skaffold? Por defecto Skaffold utiliza el entorno de minikube para construir imágenes y ejecutar contenedores fuera de ellos, y también duplica (a veces incluso triplicates) mis imágenes dentro de minikube (no sé por qué).

Pregunta hecha hace 3 años, 5 meses, 4 días - Por algorithmalchemist


3 Respuestas:

  • Skaffold construye directamente al daemon Docker de Minikube como una optimización para evitar la recuperación adicional y paquete requerido al empujar a un registro.

    Creo que sus duplicados son como los siguientes:

    $ (eval $(minikube docker-env); docker images node-example)
    REPOSITORY     TAG                                                                IMAGE ID       CREATED      SIZE
    node-example   bb9830940d8803b9ad60dfe92d4abcbaf3eb8701c5672c785ee0189178d815bf   bb9830940d88   3 days ago   92.9MB
    node-example   v1.17.1-38-g1c6517887                                              bb9830940d88   3 days ago   92.9MB
    

    Aunque estas imágenes tienen diferentes etiquetas, esas etiquetas son sólo punteros al mismo ID de imagen por lo que hay una sola imagen que se conserva.

    Skaffold normalmente limpia imágenes sobrantes de carreras anteriores. Así que no deberías ver el espacio del daemon minikube creciendo continuamente.


    Un lado: incluso si esos ID de imagen eran diferentes, una imagen está compuesta de múltiples capas, y esas capas se comparten a través de las imágenes. Así que los tamaños de imagen reportados de Docker pueden no coincidir realmente con el espacio de disco consumido.

    Respondida el Dec 18, 2020 a las 14:33 - por codeglitch

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible configurar Skaffold para que construya imágenes en tu propio daemon Docker local en lugar de en el minikube. Para lograr esto, necesitas configurar el perfil de Skaffold para usar tu contexto de Docker local en lugar del contexto de minikube.

    Puedes seguir estos pasos para lograrlo:

    • En tu archivo `skaffold.yaml`, agrega un nuevo perfil que apunte a tu daemon Docker local. Por ejemplo:
    yaml
    profiles:
         
    • name: local
    build: local: useDockerCLI: true deploy: kubectl: kubeContext: minikube
    • Ahora, puedes ejecutar Skaffold especificando el perfil local:
    bash
    skaffold dev --profile local
    

    Con esta configuración, Skaffold usará tu daemon Docker local para construir imágenes en lugar de usar el de minikube.

    Respondida el Dec 19, 2020 a las 14:36 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Cómo configurar Skaffold para construir imágenes en el demonio Docker local

    Para configurar Skaffold para construir imágenes en tu demonio Docker local en lugar de Minikube, sigue estos pasos:

    • Desactiva la configuración de imagen de Skaffold:

    En tu archivo skaffold.yaml, establece skaffold.build.local.useMinikube = false.

    • Configura el demonio Docker como contexto:

    Agrega la siguiente sección a tu archivo skaffold.yaml:

    yaml
       skaffold:
         build:
           local:
             docker:
               dockerfile: Dockerfile
               buildArgs:
                 

    Especifica cualquier argumento de compilación que necesites

    • Agrega un script de compilación personalizado:

    Crea un script de compilación personalizado llamado build.sh con el siguiente contenido:

    ``bash <h11>!/bin/bash</h11> <h1>Construye la imagen condocker build` docker build -t ${IMAGE_NAME} .

    Etiqueta la imagen con la etiqueta correcta

    docker tag ${IMAGENAME} ${IMAGENAME}:${TAG} ```

    • Especifica el script de compilación en Skaffold:

    В el archivo skaffold.yaml, agrega la siguiente sección:

    yaml
       build:
         local:
           

    Especifica el script de compilación personalizado

    script: ./build.sh

    Nota:

    Asegúrate de reemplazar IMAGE_NAME y TAG en el script de compilación con los valores correctos. Este enfoque requiere que tengas Docker instalado y configurado en tu máquina local.

    Con estos cambios, Skaffold utilizará tu demonio Docker local para construir imágenes y las implementará en Minikube. Las imágenes se construirán y almacenarán en tu máquina local, evitando la duplicación o triplicación de imágenes dentro de Minikube.

    Respondida el Dec 19, 2020 a las 14:43 - por Gemini

    Votos positivos: 0 | Votos negativos: 0