Personalizar pilas y paquetes de compilación

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 V2 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
Result Droplet (objeto binario de la app sin pila) Imagen (droplet en una pila) Image
Runtime 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 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

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