Saltar al contenido

Kaniko – Construir imágenes en Kubernetes

¿Qué es kaniko?

kaniko es una herramienta para construir imágenes de contenedores a partir de un Dockerfile, dentro de un contenedor o clúster Kubernetes.

kaniko no depende de un demonio Docker y ejecuta cada comando dentro de un Dockerfile completamente en el espacio de usuario. Esto permite construir imágenes de contenedores en entornos que no pueden ejecutar fácilmente o con seguridad un demonio Docker, como un clúster Kubernetes estándar.

kaniko está pensado para ser ejecutado como una imagen: gcr.io/kaniko-project/executor. No recomendamos ejecutar el binario del ejecutor de kaniko en otra imagen, ya que podría no funcionar.

¿Cómo trabaja kaniko?

La imagen ejecutora de kaniko es responsable de construir una imagen a partir de un Dockerfile y empujarla a un registro. Dentro de la imagen ejecutora, extraemos el sistema de archivos de la imagen base (la imagen FROM en el Dockerfile). A continuación, ejecutamos los comandos en el Dockerfile, haciendo una instantánea del sistema de archivos en el espacio de usuario después de cada uno. Después de cada comando, añadimos una capa de archivos modificados a la imagen base (si hay alguno) y actualizamos los metadatos de la imagen.

¿Cómo utilizar kaniko?

Usar kaniko para crear y subir una imagen por usted, necesitará:

  1. Un Build Context, algo que construir
  2. Un POD de kaniko corriendo

Build Context

El build context de kaniko es muy similar al contexto de compilación que enviaría a su demonio Docker para compilar una imagen; representa un directorio que contiene un Dockerfile que usará kaniko para construir su imagen. Por ejemplo, un COPYcomando en su Dockerfile debe hacer referencia a un archivo en el build context.

Deberá almacenar su build context en un lugar al que pueda acceder Kaniko. En este momento, kaniko admite estas soluciones de almacenamiento:

  • GCS Bucket
  • S3 Bucket
  • Azure Blob Storage
  • Local Directory
  • Local Tar
  • Standard Input
  • Git Repository

Ejecutando kaniko

Hay varias formas de implementar y ejecutar kaniko:

  • En un Kubernetes cluster
  • En gVisor
  • En Google Cloud Build
  • En Docker
 

En este POST lo veremos para Kubernetes:

Para correr Kaniko en Kubernetes nos hara falta:

  • Un Clúster de Kubernetes (por ejemplo GKE)
  • Un Secret
  • Un Build Context
 

Un Secret

Necesitarás un secret que contenga la información de autenticación para subir la imagen final.

Para crear un Secret para subir imágenes en GCR (Google Cloud Registry) habrá que realizar los sigueintes pasos:

  1. Crear una service account en el proyecto donde quieres subir la imagen con permisos Storage Admin 
  2. Descargar el JSON key para la SA.
  3. Renombrar la key como kaniko-secret.json
  4. Crear el secret
$ kubectl create secret generic kaniko-secret --from-file=<path to kaniko-secret.json>

El pod que hay que desplegar en Kubernetes debe ser algo similar a esta plantilla:

apiVersion: v1
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:latest
    args:
    - "--dockerfile="
    - "--context=gs:///"
    - "--destination=<gcr.io/$PROJECT/$IMAGE:$TAG>"
    volumeMounts:
    - name: kaniko-secret
      mountPath: /secret
    env:
    - name: GOOGLE_APPLICATION_CREDENTIALS
      value: /secret/kaniko-secret.json
  restartPolicy: Never
  volumes:
  - name: kaniko-secret
    secret:
      secretName: kaniko-secret

Deja una respuesta

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