Kf usa paquetes de compilación para convertir el código fuente de una aplicación en una imagen ejecutable. Cloud Native Buildpacks usa la API Buildpack v3 más reciente y empresas como VMware y Heroku están añadiendo activamente la compatibilidad con la versión 3 a los buildpacks.
Kf admite buildpacks que cumplen las versiones V2 y V3 de la especificación de la API Buildpack.
Comparación entre paquetes de compilaciones V2 y V3
Paquetes de compilación V2 | Paquetes de compilación V3 | |
---|---|---|
Nombres alternativos | Buildpacks de Cloud Foundry | Cloud Native Buildpacks (CNB) e imágenes de compilación |
Estado | Se está sustituyendo | Actual |
Propiedad | Cloud Foundry | Buildpacks.io |
Pila | Compartido por el compilador y el tiempo de ejecución | Opcionalmente, puede ser diferente para el compilador y el tiempo de ejecución. |
Desarrollo local | No es posible. | Sí, con la CLI de pack |
Compilaciones personalizadas | Disponible en el tiempo de ejecución | Debe estar integrado en el compilador |
Ciclo de vida de los buildpacks
Paso | Cloud Foundry | Kf con paquetes de compilación V2 | Kf con paquetes de compilación V3 |
---|---|---|---|
Ubicación de origen | Servicio BITS | Registro de contenedor | Registro de contenedor |
Ubicación del paquete de compilación | BOSH/HTTP | HTTP | Registro de contenedor |
Ubicación de la pila | BOSH | Registro de contenedor | Registro de contenedor |
Resultado | Droplet (binario de aplicación sin pila) | Imagen (gota en una pila) | Imagen |
Tiempo de ejecución | Gota pegada en la parte superior de la pila y en ejecución | Imagen producida por Run | Imagen producida por Run |
Kf siempre genera una imagen completa y ejecutable como resultado de su proceso de compilación. Por otro lado, Cloud Foundry genera partes de una imagen ejecutable durante la compilación y el resto se añade durante el tiempo de ejecución.
Kf decidió seguir el modelo de producir siempre una imagen completa por los siguientes motivos:
- Las imágenes se pueden exportar, ejecutar de forma local e inspeccionar de forma estática
- Mejor seguridad y auditoría con herramientas como la autorización binaria
- Los despliegues de aplicaciones son reproducibles
Kf y paquetes de compilación
Kf almacena su lista global de buildpacks y stacks en el config-defaults
ConfigMap del espacio de nombres kf
.
Cada espacio refleja estos paquetes de compilación en su campo de estado.
En el caso de un espacio llamado buildpack-docs
, puedes ejecutar el siguiente comando para ver la configuración completa:
kf space buildpack-docs
Getting Space buildpack-docs API Version: kf.dev/v1alpha1 Kind: Space Metadata: Creation Timestamp: 2020-02-14T15:09:52Z Name: buildpack-docs Self Link: /apis/kf.dev/v1alpha1/spaces/buildpack-docs UID: 0cf1e196-4f3c-11ea-91a4-42010a80008d Status: Build Config: Buildpacks V2: - Name: staticfile_buildpack URL: https://github.com/cloudfoundry/staticfile-buildpack Disabled: false - Name: java_buildpack URL: https://github.com/cloudfoundry/java-buildpack Disabled: false Stacks V2: - Image: cloudfoundry/cflinuxfs3 Name: cflinuxfs3 Stacks V3: - Build Image: cloudfoundry/cnb:cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Name: org.cloudfoundry.stacks.cflinuxfs3 Run Image: cloudfoundry/run:full-cnb
En la sección Build Config
, hay tres campos que debes consultar:
- Buildpacks V2 contiene una lista de paquetes de compilación compatibles con V2 en el orden en que se ejecutarán.
- Stacks V2 indica las pilas que se pueden elegir para activar una compilación de buildpack de V2.
- Stacks V3 indica las pilas que se pueden elegir para activar una compilación de paquetes de compilación V3.
También puedes enumerar las pilas con kf stacks
:
kf stacks
Getting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04
Como las imágenes de compilación de la versión 3 ya tienen sus buildpacks integrados, debes usar kf buildpacks
para obtener la lista:
kf buildpacks
Getting buildpacks in Space: buildpack-docs Buildpacks for V2 stacks: Name Position URL staticfile_buildpack 0 https://github.com/cloudfoundry/staticfile-buildpack java_buildpack 1 https://github.com/cloudfoundry/java-buildpack V3 Stack: org.cloudfoundry.stacks.cflinuxfs3: Name Position Version Latest org.cloudfoundry.jdbc 0 v1.0.179 true org.cloudfoundry.jmx 1 v1.0.180 true org.cloudfoundry.go 2 v0.0.2 true org.cloudfoundry.tomcat 3 v1.1.102 true org.cloudfoundry.distzip 4 v1.0.171 true org.cloudfoundry.springboot 5 v1.1.2 true ...
Personalizar paquetes de compilación V3
Puedes personalizar los buildpacks que están disponibles para tus desarrolladores creando tu propia imagen de compilador con los buildpacks a los que deberían tener acceso. También puedes usar imágenes de compilación publicadas por otros autores.
Usar una imagen de compilación de terceros
Puedes consultar una lista de pilas de CNB publicadas en la CLI de paquetes de compilación pack
. En el momento de escribir este artículo, pack suggest-stacks
genera lo siguiente:
pack suggest-stacks
Stacks maintained by the community:
Stack ID: heroku-18 Description: The official Heroku stack based on Ubuntu 18.04 Maintainer: Heroku Build Image: heroku/pack:18-build Run Image: heroku/pack:18
Stack ID: io.buildpacks.stacks.bionic Description: A minimal Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:base-cnb Run Image: cloudfoundry/run:base-cnb
Stack ID: org.cloudfoundry.stacks.cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:full-cnb Run Image: cloudfoundry/run:full-cnb
Stack ID: org.cloudfoundry.stacks.tiny Description: A tiny Cloud Foundry stack based on Ubuntu 18.04, similar to distroless Maintainer: Cloud Foundry Build Image: cloudfoundry/build:tiny-cnb Run Image: cloudfoundry/run:tiny-cnb
Para modificar Kf de forma que use la pila publicada por Heroku, edita el config-defaults
ConfigMap en el espacio de nombres kf
.
Añade una entrada a la clave spaceStacksV3
como la siguiente:
kubectl edit kfsystem kfsystem
spaceStacksV3: | - name: org.cloudfoundry.stacks.cflinuxfs3 description: A large Cloud Foundry stack based on Ubuntu 18.04 buildImage: cloudfoundry/cnb:cflinuxfs3 runImage: cloudfoundry/run:full-cnb - name: heroku-18 description: The official Heroku stack based on Ubuntu 18.04 buildImage: heroku/pack:18-build runImage: heroku/pack:18
A continuación, vuelve a ejecutar stacks
:
kf stacks
Getting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04 V3 heroku-18 heroku/pack:18-build heroku/pack:18 The official Heroku stack based on Ubuntu 18.04
Crear una imagen de creador
La CLI de paquetes de compilaciónpack
se usa para crear tu propia imagen de compilador. Puedes seguir la documentación de pack
Trabajar con compiladores usando create-builder
para crear tu propia imagen de compilador. Una vez creado, envíalo a un registro de contenedores y añádelo al config-defaults
ConfigMap.
Definir un stack predeterminado
A las aplicaciones se les asignará una pila predeterminada si no se proporciona ninguna en su manifiesto. La pila predeterminada es la primera de la lista de pilas V2 o V3. A menos que se anule, se elige una pila V2 para que sea compatible con Cloud Foundry.
Puedes forzar a Kf a usar una pila V3 en lugar de una V2 configurando el campo spaceDefaultToV3Stack
en el ConfigMap config-defaults
del espacio de nombres kf
como "true"
:
kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Esta opción también se puede modificar en cada espacio cambiando el valor del campo spec.buildConfig.defaultToV3Stack
a true
o false
. Si no se define, se usará el valor de config-defaults
ConfigMap.
Valor de config-defaults para spaceDefaultToV3Stack |
Espacio spec.buildConfig.defaultToV3Stack |
Pila predeterminada |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
any | false |
V2 |
any | true |
V3 |