Comparación de los paquetes de compilación V2 y V3

Un paquete de compilación convierte el código fuente en un ejecutable y se usa para entregar una forma simple, confiable y repetible de crear contenedores. Kf es compatible con los paquetes de compilación V2 y V3, y es importante comprender las diferencias entre ellos.

Paquetes de compilación V2

La mayoría de las aplicaciones de Cloud Foundry ya usan paquetes de compilación V2. Cuando se usan paquetes de compilación V2 con Kf, los objetos binarios del ciclo de vida y los paquetes de compilación se descargan y configuran desde las URL de Git. Kf luego usa la CLI de lifecycle para ejecutar cada paquete de compilación en el código fuente.

Ventajas

  • Lista para usar sin cambios en la canalización ni en el código.

Desventajas

  • Paquete de compilación heredado reemplazado por V3.
  • Rendimiento y confiabilidad más débiles. La canalización de compilación de Kf requiere más IO para los paquetes de compilación V2.
  • Menos recursos de la comunidad.
  • Kf solo admite repositorios de Git de OSS.

Paquetes de compilación V3

Los paquetes de compilación V3 son un proyecto de Cloud Native Computing Foundation (CNCF) con una especificación bien definida, una CLI (paquete) y una comunidad en crecimiento que innova en diferentes lenguajes y frameworks. Google Cloud también tiene su propio conjunto de paquetes de compilación de Google Cloud.

Los paquetes de compilación V3 tienen dos contenedores de OCI generales:

  • Imagen del compilador
  • Ejecuta la imagen

Imagen del compilador

La imagen del compilador se usa mientras se compila tu código fuente en un contenedor ejecutable. La imagen tiene las secuencias de comandos detect necesarias y otras utilidades para compilar código fuente.

Ejecuta la imagen

La imagen de ejecución es la imagen base en la que se compila un contenedor. Esto significa que es la imagen base que se ejecutará cuando se ejecute la app.

Capas

Los paquetes de compilación V3 usan capas para redactar el contenedor final. Cada paquete de compilación incluido en una compilación tiene la oportunidad de manipular el sistema de archivos y las variables de entorno de la aplicación. Este enfoque de capas permite que los paquetes de compilación sean más delgados y más genéricos.

Los paquetes de compilación V3 se compilan en contenedores de OCI. Esto requiere que la imagen del compilador V3 se almacene en un registro de contenedores al que tenga acceso la canalización de compilación de Kf. La canalización de compilación usa la imagen del compilador para aplicar las secuencias de comandos subyacentes a fin de compilar el código fuente en un contenedor ejecutable.

Ventajas

Desventajas

  • Puede requerir actualizaciones de código o proceso. Por ejemplo, el paquete de compilación de Java requiere un código fuente, mientras que el paquete de compilación de V2 requiere un archivo jar.
  • Los paquetes de compilación V3 son más recientes y podrían requerir validación adicional (es que usan paquetes de compilación desarrollados por la comunidad).

kf stacks

Vizualiza pilas

Cuando se envía una app, la canalización de compilación determina el paquete de compilación según la pila seleccionada (especificada mediante la marca --stack o el manifiesto).

Para ver qué pilas están disponibles en un espacio, primero asegúrate de que se orienta un espacio:

kf target -s myspace

Luego, se puede usar el subcomando kf stacks para enumerar las pilas:

kf stacks

En el resultado, se muestran las pilas V2 y V3:

Getting stacks in Space: myspace
Version  Name                                Build Image                                                                                          Run Image                                                                                          Description
V2       cflinuxfs3                          cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5      cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3       org.cloudfoundry.stacks.cflinuxfs3  cloudfoundry/cnb:cflinuxfs3@sha256:f96b6e3528185368dd6af1d9657527437cefdaa5fa135338462f68f9c9db3022  cloudfoundry/run:full-cnb@sha256:dbe17be507b1cc6ffae1e9edf02806fe0e28ffbbb89a6c7ef41f37b69156c3c2  A large Cloud Foundry stack based on Ubuntu 18.04

Configura pilas

La configuración de Stack se puede actualizar si editas el recurso personalizado kfsystem:

kubectl edit kfsystem kfsystem

En este ejemplo, se configuran los paquetes de compilación de Google Cloud una pila V3:

spec:
  kf:
    config:
      spaceStacksV3:
      - name: google
        description: Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
        buildImage: gcr.io/buildpacks/builder:v1
        runImage: gcr.io/buildpacks/gcp/run:v1

Esta nueva pila ahora se puede enviar:

kf push myapp --stack google

En este ejemplo, se configura el paquete de compilación de Ruby V2 y se establecen los valores predeterminados de la canalización de compilación para que usen las pilas V2:

spec:
  kf:
    config:
      spaceDefaultToV3Stack: false
      spaceBuildpacksV2:
      - name: ruby_buildpack
        url: https://github.com/cloudfoundry/ruby-buildpack
      spaceStacksV2:
      - name: cflinuxfs3
        image: cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5

Migración

Nota: Por el momento, esta función está en fase experimental y está sujeta a cambios.

Kf tiene una herramienta de migración que puede unir un paquete de compilación V2. El resultado es un paquete de compilación V3 que se puede usar dentro de un compilador de V3. El paquete de compilación unido se puede usar en cualquier lugar donde estén disponibles los paquetes de compilación V3.

kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publish

Esto creará una imagen de paquete de compilación llamada gcr.io/your-project/v2-go-buildpack. Luego, se puede usar para crear un compilador si sigues los documentos para crear un compilador.

Este subcomando usa las siguientes CLI de forma transparente:

  • go
  • git
  • pack

Se recomienda que utilice Cloud Shell Editor para asegurarse de que cada subcomando esté disponible en la ruta correcta y que sea la versión correcta.

Problemas conocidos

Las siguientes son características que aún no funcionan con Kf. Si una de las organizaciones tiene una prioridad alta, comunícate con tu representante de ventas:

  • Registros de contenedores privados para imágenes del compilador V3.
  • Almacenamiento en caché V3.
  • Paquetes de compilación V2 que requieren credenciales Git.