Kf utiliza los paquetes de compilación para convertir el código fuente de una aplicación en una imagen ejecutable. Los paquetes de compilación nativos de Cloud usan la última versión de la API de Buildpack v3, y las empresas, como VMware y Heroku, agregan activamente compatibilidad con v3 a los paquetes de compilación existentes.
Kf es compatible con los paquetes de compilación que se ajustan a las V2 y V3 de la especificación de la API de Buildpack.
Comparación entre los paquetes de compilación V2 y V3
Paquetes de compilación V2 | Paquetes de compilación V3 | |
---|---|---|
Nombres alternativos | Paquetes de compilación de Cloud Foundry | Cloud Native Buildpacks (CNB), imágenes de compiladores |
Estado | Se reemplazará | Actual |
Propiedad | Cloud Foundry | Buildpacks.io |
Pila | Compartido por el compilador y el entorno de ejecución | Puede ser diferente para el compilador y el entorno de ejecución |
Desarrollo local | No es posible | Sí, con la CLI de pack |
Paquetes de compilación personalizados | Disponible en el entorno de ejecución | Deben estar integrados en el compilador |
Ciclo de vida de paquete de compilación
Paso | Cloud Foundry | Kf con paquetes de compilación V2 | Kf con paquetes de compilación V3 |
---|---|---|---|
Ubicación de la fuente | Servicio de BITS | Container Registry | Container Registry |
Ubicación del paquete de compilación | BOSH/HTTP | HTTP | Container Registry |
Ubicación de la pila | BOSH | Container Registry | Container Registry |
Resultado | Droplet (objeto binario de la app sin pila) | Imagen (droplet en una pila) | Imagen |
Entorno de ejecución | Droplet pegada sobre la pila y en ejecución | Ejecuta la imagen producida | Ejecuta la imagen producida |
Kf siempre produce una imagen ejecutable como resultado de su proceso de compilación. Por otro lado, Cloud Foundry produce partes de una imagen ejecutable durante la compilación y el resto se agrega en el tiempo de ejecución.
Kf eligió seguir el modelo de producir siempre una imagen completa por los siguientes motivos:
- Las imágenes se pueden exportar, ejecutar de forma local y, también, inspeccionarse de forma estática.
- Mayor seguridad y auditoría con herramientas como la autorización binaria.
- Las implementaciones de la app son reproducibles.
Kf y paquetes de compilación
Kf almacena su lista global de paquetes de compilación y pilas en el ConfigMap config-defaults
en el 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 del espacio:
$ 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 a los que se debe prestar atención:
- Los paquetes de compilación V2 contienen una lista de paquetes de compilación compatibles con V2 en el orden en que se ejecutarán.
- Las pilas V2 indican las pilas que se pueden elegir para activar una compilación de paquetes de compilación V2
- Las pilas V3 indican 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
Debido a que las imágenes de compilación de V3 ya tienen sus paquetes de compilación 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
...
Personaliza los paquetes de compilación V3
Puedes personalizar los paquetes de compilación que están disponibles para tus desarrolladores si creas tu propia imagen de compilador con exactamente los paquetes de compilación a los que deben tener acceso. También puedes utilizar imágenes de compilador publicadas por otros autores.
Usa una imagen de compilador de terceros
Hay una lista de las pilas de CNB publicadas en la CLI de Buildpack pack
. A partir de esta escritura, pack suggest-stacks
muestra 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
Si deseas modificar Kf para que use la pila publicada por Heroku, edita el ConfigMap de config-defaults
en el espacio de nombres kf
.
Agrega una entrada a la clave spaceStacksV3
como se muestra a continuación:
$ 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
Luego, 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
Crea tu propia imagen de compilador
La CLI de paquetes de compilación pack
se usa para crear tu propia imagen de compilador. Puedes seguir la documentación Trabaja con compiladores que usan create-builder
de pack
para crear tu propia imagen de compilador. Una vez creada, envíala a un registro de contenedores y agrégala al ConfigMap config-defaults
.
Configura una pila predeterminada
A las apps se les asignará una pila predeterminada si no se proporciona una en su manifiesto. La pila predeterminada es la primera en la lista de pilas V2 o V3. A menos que se anule, se elige una pila V2 para brindar compatibilidad con Cloud Foundry.
Para hacer que Kf use una pila de V3 en lugar de V2, establece el campo spaceDefaultToV3Stack
en el ConfigMap config-defaults
en el espacio de nombres kf
para que sea "true"
:
$ kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Esta opción también se puede modificar por espacio. Para ello, cambia el campo spec.buildConfig.defaultToV3Stack
a true
o false
. Si no se configura, se usa el valor del ConfigMap config-defaults
.
Valor de config-defaults para spaceDefaultToV3Stack |
spec.buildConfig.defaultToV3Stack del espacio |
Pila predeterminada |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
cualquiera | false |
V2 |
cualquiera | true |
V3 |