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
- Compilador y ejecuta imagen compatible con Google.
- Funciona con varios productos de Google Cloud, como Cloud Build.
- Comunidad y registro de paquetes de compilación en crecimiento.
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.