Les buildpacks sont utilisés par Kf pour transformer le code source d'une application en image exécutable. Les buildpacks cloud natifs utilisent la dernière version de l'API Buildpack v3. Les entreprises travaillent activement pour ajouter la compatibilité V3 aux buildpacks existants.
Kf est compatible avec les buildpacks conformes aux spécifications V2 et V3 de l'API Buildpack.
Comparer les buildpacks V2 et V3
Buildpacks V2 | Buildpacks V3 | |
---|---|---|
Autres noms | Buildpacks Cloud Foundry | Buildpacks 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 buildpacks V2 | Kf avec buildpacks V3 |
---|---|---|---|
Emplacement de la 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 |
Environnement d'exécution | 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 buildpacks
Kf stocke sa liste globale de buildpacks et de piles dans le fichier ConfigMap config-defaults
de l'espace de noms kf
. La modification des propriétés des buildpacks et des piles doit être effectuée au niveau de la ressource personnalisée kfsystem
. L'opérateur Kf met automatiquement à jour le fichier ConfigMap config-defaults
en fonction des valeurs définies dans kfsystem
.
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 buildpacks V3
Vous pouvez personnaliser les buildpacks disponibles pour vos développeurs en créant votre propre image de compilateur qui n'utilise que les buildpacks spécifiques 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 dans le pack
de CLI Buildpack.
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 la ressource personnalisée kfsystem
, qui met automatiquement à jour le fichier ConfigMap config-defaults
dans l'espace de noms kf
.
Ajoutez une entrée à la clé spaceStacksV3
comme suit :
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
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 CLI Buildpack permet de créer votre propre image de compilateur. Vous pouvez suivre les instructions de la section Travailler avec des compilateurs en utilisant create-builder
dans la documentation de pack
pour créer votre propre image de compilateur. Une fois le fichier créé, transférez-le dans un registre de conteneurs, puis ajoutez-le à la ressource personnalisée kfsystem
.
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 la ressource personnalisée kfsystem
(kfsystem
met automatiquement à jour le champ spaceDefaultToV3Stack
correspondant dans le fichier ConfigMap config-defaults
) :
kubectl edit kfsystem kfsystem
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 |