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 configmap config-defaults -n kf
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 |