Personnaliser des piles et des packs de création

Les packs de création sont utilisés par Kf pour transformer le code source d'une application en image exécutable. Les packs de création cloud natifs utilisent la dernière version de l'API Buildpack v3, et divers entreprises telles que VMware et Heroku travaillent activement à rendre la v3 compatible avec les packs de création existants.

Kf est compatible avec les buildpacks conformes à la V2 et à la V3 de la spécification de l'API Buildpack.

Comparaison entre les packs de création V2 et V3

Packs de création V2 Packs de création V3
Autres noms Packs de création Cloud Foundry Packs de création cloud natifs (CNB), Images de compilateur
État En cours de remplacement Actuel
Propriété Cloud Foundry Buildpacks.io
Pile Partagé par le compilateur et l'environnement d'exécution Éventuellement différent pour le compilateur et l'environnement d'exécution
Développement local Impossible Oui, avec la CLI pack
Packs de création personnalisés Disponible au moment de l'exécution Doit être intégré au compilateur

Cycle de vie d'un pack de création

Étape Cloud Foundry Kf avec Packs de création V2 Kf avec Packs de création V3
Emplacement source Service BITS Container Registry Container Registry
Emplacement du pack de création BOSH/HTTP HTTP Container Registry
Emplacement de la pile BOSH Container Registry Container Registry
Résultat Droplet (binaire d'application sans pile) Image (droplet sur une pile) Image
Runtime Droplet collé sur le dessus de la pile et exécuté Exécute l'image produite Exécute l'image produite

Kf produit toujours une image exécutable complète suite à son processus de compilation. Cloud Foundry, en revanche, produit des parties d'une image exécutable au moment de la compilation et le reste est ajouté lors de l'exécution.

Kf a choisi de suivre le modèle qui consiste à toujours produire une image complète pour les raisons suivantes :

  • Les images peuvent être exportées, exécutées localement et inspectées de manière statique
  • Sécurité et audit améliorés grâce à des outils tels que l'autorisation binaire
  • Les déploiements d'applications sont reproductibles

Kf et packs de création

Kf stocke sa liste globale de packs de création et de piles dans le fichier ConfigMap config-defaults de l'espace de noms kf. Chaque espace reflète ces packs de création dans son champ d'état. Pour un espace nommé buildpack-docs, vous pouvez exécuter la commande suivante pour afficher la configuration complète de l'espace :

$ 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

Dans la section Build Config se trouvent trois champs :

  • Buildpacks V2 contient une liste de packs de création compatibles V2 dans l'ordre d'exécution.
  • Stacks V2 indique les piles pouvant être choisies pour déclencher une compilation de pack de création V2.
  • Stacks V3 indique les piles pouvant être choisies pour déclencher une compilation de pack de création V3.

Vous pouvez également répertorier les piles avec 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

Comme les images de compilation V3 intègrent déjà leurs packs de création, vous devez utiliser kf buildpacks pour obtenir la liste :

$ 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
  ...

Personnaliser les packs de création V3

Vous pouvez personnaliser les packs de création disponibles pour vos développeurs en créant votre propre image de compilateur avec les packs de création exacts auxquels ils doivent avoir accès. Vous pouvez également utiliser des images de compilateurs publiées par d'autres auteurs.

Utiliser une image de compilateur tierce

La liste des piles CNB publiées est disponible sur la page Pack de création CLI pack. Au moment où cette section a été rédigée, pack suggest-stacks renvoie :

$ 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

Pour modifier Kf et utiliser la pile publiée par Heroku, modifiez le fichier ConfigMap config-defaults dans l'espace de noms kf. Ajoutez une entrée à la clé spaceStacksV3 comme suit :

$ 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

Ensuite, exécutez à nouveau 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

Créer votre propre image de compilateur

Le Pack de création CLI pack permet de créer votre propre image de compilateur. Vous pouvez suivre les instructions de la section Travailler avec des compilateurs à l'aide de create-builder de la documentation pack pour créer votre propre image de compilateur. Une fois créée, transférez-la dans un registre de conteneurs, puis ajoutez-la au fichier ConfigMap config-defaults.

Définir une pile par défaut

Les applications se verront attribuer une pile par défaut si aucune n'est fournie dans leur fichier manifeste. La pile par défaut est la première de la liste des piles V2 ou V3. Sauf si elle est remplacée, une pile V2 est choisie pour assurer la compatibilité avec Cloud Foundry.

Vous pouvez forcer Kf à utiliser une pile V3 au lieu d'une pile V2 en définissant le champ spaceDefaultToV3Stack sur "true" dans le fichier ConfigMap config-defaults de l'espace de noms kf :

$ kubectl edit configmap config-defaults -n kf

spaceDefaultToV3Stack: "true"

Cette option peut également être modifiée pour chaque espace en définissant le champ spec.buildConfig.defaultToV3Stack sur true ou false. Si cette valeur n'est pas définie, la valeur du fichier ConfigMap config-defaults est utilisée.

Valeur de config-defaults pour spaceDefaultToV3Stack spec.buildConfig.defaultToV3Stack de l'espace Pile par défaut
unset unset V2
"false" unset V2
"true" unset V3
tous false V2
tous true V3