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 spec 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
  • Ejecutar 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
V2       cflinuxfs3                          cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5      cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3       kf-v2-to-v3-shim                    gcr.io/kf-releases/v2-to-v3:v2.7.0                                                                   gcr.io/buildpacks/gcp/run:v1                                                                       This is a stack added by the integration tests to assert that v2->v3 shim works
V3       google                              gcr.io/buildpacks/builder:v1                                                                         gcr.io/buildpacks/gcp/run:v1                                                                       Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
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 de paquetes de compilación V2 a V3

Kf proporciona una pila V3 para compilar aplicaciones que se compilaron con paquetes de compilación V2 estándar, mediante una pila llamada kf-v2-to-v3-shim. La pila kf-v2-to-v3-shim se crea según la API de paquetes de compilación estándar V3. Se crea una imagen de compilador mantenida por Google con cada actualización de Kf, mediante el proceso de compilación estándar. La imagen del compilador agrega una lista de paquetes de compilación V3 creados por el mismo proceso usado con el comando kf wrap-v2-buildpack. Las imágenes del paquete de compilación V3 se crean con las imágenes del paquete de compilación estándar V2. Es importante tener en cuenta que los paquetes de compilación V3 no contienen el objeto binario de los paquetes de compilación V2 a los que se hace referencia. En su lugar, se hace referencia a las imágenes del paquete de compilación V2, y los bits se descargan en el momento de la compilación de la app (mediante la ejecución de kf push).

En el momento de la compilación de la app, el paquete de compilación V2 se descarga desde el repositorio de Git correspondiente. Cuando se ejecuta la detección de V3, delega a la secuencia de comandos de detección de V2 descargada. Para el primer grupo de paquetes de compilación que pasa la detección, continúa con el paso de compilación, que delega la ejecución de compilación a la secuencia de comandos del compilador V2 descargada.

Los siguientes paquetes de compilación V2 son compatibles con la pila kf-v2-to-v3-shim:

Paquete de compilación Repositorio de Git
java_buildpack https://github.com/cloudfoundry/java-buildpack
dotnet_core_buildpack https://github.com/cloudfoundry/dotnet-core-buildpack
nodejs_buildpack https://github.com/cloudfoundry/nodejs-buildpack
go_buildpack https://github.com/cloudfoundry/go-buildpack
python_buildpack https://github.com/cloudfoundry/python-buildpack
binary_buildpack https://github.com/cloudfoundry/binary-buildpack
nginx_buildpack https://github.com/cloudfoundry/nginx-buildpack

Opción 1: Migra las apps compiladas con paquetes de compilación estándar V2

Para compilar apps con la pila kf-v2-to-v3-shim, usa el siguiente comando:

kf push myapp --stack kf-v2-to-v3-shim

La pila kf-v2-to-v3-shim detectará de forma automática el entorno de ejecución con los paquetes de compilación V2 unidos. La imagen de la app resultante se crea con la canalización de compilación y V3 estándar, pero el compilador del paquete de compilación V2 equivalente.

Opción 2: Migra las apps compiladas con paquetes de compilación personalizados V2

Kf tiene una herramienta de migración de paquetes de compilación que puede tomar un paquete de compilación V2 y unirlo con un paquete de compilación 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
  • unzip

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.