Comparar paquetes de compilación V2 y V3

Un buildpack convierte el código fuente en un archivo ejecutable y se usa para ofrecer una forma sencilla, fiable y repetible de crear contenedores. Kf admite los paquetes de compilación V2 y V3, y es importante conocer las diferencias entre ellos.

Paquetes de compilación V2

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

Ventajas

  • Listas para usar desde el minuto uno sin necesidad de cambiar la canalización ni el código.

Inconvenientes

  • El paquete de compilación antiguo se ha sustituido por la versión 3.
  • Rendimiento y fiabilidad más bajos. El proceso de compilación de Kf requiere más E/ para los buildpacks de la versión 2.
  • Menos recursos de la comunidad.
  • Kf solo admite repositorios de Git de software libre.

Paquetes de compilación V3

Los buildpacks de la versión 3 son un proyecto de la Cloud Native Computing Foundation (CNCF) con una especificación bien definida, una CLI (pack) y una comunidad en crecimiento que está innovando en torno a diferentes lenguajes y frameworks. Google Cloud también tiene su propio conjunto de buildpacks de Google Cloud.

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

  • Imagen de compilación
  • Imagen de ejecución

Imagen de compilación

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

Imagen de ejecución

La imagen de ejecución es la imagen base sobre la que se crea un contenedor. Esto significa que es la imagen base que se ejecutará cuando se ejecute la aplicación.

Capas

Los buildpacks de la versión 3 usan capas para componer 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 ligeros y genéricos.

Los buildpacks de la versión 3 se basan en contenedores OCI. Para ello, la imagen del compilador V3 debe almacenarse 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 y compilar el código fuente en un contenedor ejecutable.

Ventajas

Inconvenientes

  • Puede que requiera actualizaciones de código o de procesos. Por ejemplo, el paquete de compilación de Java requiere código fuente, mientras que el paquete de compilación V2 requiere un archivo JAR.
  • Los buildpacks de la versión 3 son más recientes y pueden requerir validación adicional (si se usan buildpacks desarrollados por la comunidad).

kf stacks

Ver pilas

Al enviar una aplicación, la canalización de compilación determina el paquete de compilación en función del stack seleccionado (especificado mediante la marca --stack o el manifiesto).

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

kf target -s myspace

A continuación, se puede usar el subcomando kf stacks para enumerar los stacks:

kf stacks

El resultado muestra las pilas de versiones 2 y 3:

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

Configurar acoplamientos

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

kubectl edit kfsystem kfsystem

En este ejemplo se definen los Google Cloud paquetes de compilación de un stack 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

Ahora se puede enviar este nuevo Stack:

kf push myapp --stack google

En este ejemplo se configura el paquete de compilación Ruby V2 y se definen los valores predeterminados de la canalización de compilación para usar 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: Esta función es experimental y está sujeta a cambios.

Kf tiene una herramienta de migración que puede envolver un paquete de compilación de la versión 2. El resultado es un paquete de compilación V3 que se puede usar en un compilador V3. El paquete de compilación envuelto se puede usar en cualquier lugar donde estén disponibles los paquetes de compilación de la versión 3.

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

Se creará una imagen de paquete de compilación llamada gcr.io/your-project/v2-go-buildpack. Después, se puede usar para crear un creador siguiendo las instrucciones de los documentos sobre cómo crear un creador.

Este subcomando usa las siguientes CLIs de forma transparente:

  • go
  • git
  • pack

Te recomendamos que uses el editor de Cloud Shell para asegurarte de que cada subcomando esté disponible en la ruta correcta y sea la versión adecuada.

Problemas conocidos

Estas son las funciones que aún no funcionan con Kf. Si una de ellas es una prioridad para tu organización, ponte en contacto con tu representante de ventas:

  • Registros de contenedores privados para imágenes de compilador de la versión 3.
  • Almacenamiento en caché de la versión 3.
  • Buildpacks de la versión 2 que requieren credenciales de Git.