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