I buildpack vengono utilizzati da Kf per trasformare il codice sorgente di un'applicazione in un'immagine eseguibile. Cloud Native Buildpacks utilizza la versione più recente dell'API Buildpack 3 e aziende come VMware e Heroku stanno aggiungendo attivamente il supporto della versione 3 ai buildpack esistenti.
Kf supporta Buildpacks conformi sia a V2 che a V3 della specifica dell'API Buildpack.
Confronto tra buildpack V2 e V3
Buildpack V2 | Buildpack V3 | |
---|---|---|
Nomi alternativi | Buildpack Cloud Foundry | Cloud Native Buildpacks (CNB), immagini del builder |
Stato | In corso di sostituzione | Attuale |
Proprietà | Cloud Foundry | Buildpacks.io |
Impilare | Condivisi da Builder e runtime | Facoltativamente diverso per il generatore e il runtime |
Sviluppo locale | Impossibile | Sì, con l'interfaccia a riga di comando pack |
Buildpack personalizzati | Disponibile in fase di esecuzione | Deve essere integrato nel builder |
Ciclo di vita del buildpack
Passaggio | Cloud Foundry | Kf con Buildpacks V2 | Kf con Buildpacks V3 |
---|---|---|---|
Posizione di origine | Servizio BITS | Container Registry | Container Registry |
Località Buildpack | BOSH/HTTP | HTTP | Container Registry |
Posizione dello stack | BOSH | Container Registry | Container Registry |
Risultato | Droplet (file binario dell'app senza stack) | Immagine (Goccia in una pila) | Immagine |
Runtime | Goccia incollata sulla parte superiore della pila e in esecuzione | Esegui immagine prodotta | Esegui immagine prodotta |
Kf produce sempre un'immagine eseguibile completa in seguito al suo processo di compilazione. Cloud Foundry, invece, produce parti di un'immagine eseguibile in fase di compilazione e il resto viene aggiunto in fase di runtime.
Kf ha scelto di seguire il modello di produzione di un'immagine completa per i seguenti motivi:
- Le immagini possono essere esportate, eseguite localmente e ispezionate in modo statico
- Maggiore sicurezza e controllo con strumenti come l'autorizzazione binaria
- I deployment delle app sono riproducibili
Kf e Buildpack
Kf archivia il suo elenco globale di buildpack e stack nel ConfigMap config-defaults
nello spazio dei nomi kf
.
Ogni spazio riflette questi buildpack nel relativo campo di stato.
Per uno spazio denominato buildpack-docs
, puoi eseguire il seguente comando per visualizzare la configurazione completa dello spazio:
$ 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
Nella sezione Build Config
ci sono tre campi da esaminare:
- Buildpacks V2 contiene un elenco di buildpack compatibili con V2 nell'ordine in cui verranno eseguiti
- Stack V2 indica gli stack che possono essere scelti per attivare una compilazione del buildpack V2
- Stack V3 indica gli stack che possono essere scelti per attivare una compilazione del buildpack V3
Puoi anche elencare gli stack 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
Poiché le immagini di compilazione della versione 3 hanno già i relativi buildpack integrati, devi utilizzare kf buildpacks
per visualizzare l'elenco:
$ 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
...
Personalizzazione dei Buildpack V3
Puoi personalizzare i buildpack disponibili per i tuoi sviluppatori creando la tua immagine del generatore con esattamente i buildpack a cui devono avere accesso. Puoi anche utilizzare le immagini del builder pubblicate da altri autori.
Immagine Utilizza un generatore di terze parti
Un elenco degli stack CNB pubblicati è disponibile nell'interfaccia a riga di comando Buildpack pack
. Al momento della stesura di questo documento, pack suggest-stacks
genera:
$ 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
Per modificare Kf e utilizzare lo stack pubblicato da Heroku, modifica config-defaults
ConfigMap nello spazio dei nomi kf
.
Aggiungi una voce alla chiave spaceStacksV3
come segue:
$ 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
Poi esegui di nuovo 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 la tua immagine del builder
L'interfaccia a riga di comando Buildpack pack
viene utilizzata per creare la tua immagine del builder. Puoi seguire la documentazione di Utilizzo dei builder con create-builder
di pack
per creare la tua immagine del builder. Una volta creato, esegui il push in un Container Registry e utilizzalo per aggiungerlo al ConfigMap config-defaults
.
Impostare una serie predefinita
Alle app verrà assegnato uno stack predefinito se non ne viene fornito uno nel file manifest. Lo stack predefinito è il primo nell'elenco degli stack V2 o V3. Se non viene ignorato, viene scelto uno stack V2 per la compatibilità con Cloud Foundry.
È possibile forzare Kf a utilizzare uno stack V3 anziché V2 impostando il parametro
Campo spaceDefaultToV3Stack
nel ConfigMap config-defaults
in kf
Spazio dei nomi da "true"
:
$ kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Questa opzione può essere modificata anche in base allo spazio impostando il campo spec.buildConfig.defaultToV3Stack
su true
o false
. Se il criterio non viene configurato,
viene utilizzato il valore dell'oggetto ConfigMap config-defaults
.
Valore config-defaults per spaceDefaultToV3Stack |
spec.buildConfig.defaultToV3Stack dello spazio |
Stack predefinito |
---|---|---|
unset | unset | V2 |
"false" |
non impostato | V2 |
"true" |
non impostato | V3 |
qualsiasi | false |
V2 |
qualsiasi | true |
V3 |