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 i buildpack conformi sia alla V2 sia alla V3 della specifica dell'API Buildpack.
Confronto tra i 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 generatore |
Ciclo di vita del buildpack
Passaggio | Cloud Foundry | Kf con buildpack V2 | Kf con Buildpacks V3 |
---|---|---|---|
Posizione di origine | Servizio BITS | Container Registry | Container Registry |
Località del buildpack | BOSH/HTTP | HTTP | Container Registry |
Posizione dello stack | BOSH | Container Registry | Container Registry |
Risultato | Droplet (file binario dell'app senza stack) | Immagine (goccia su una pila) | Immagine |
Runtime | Goccia incollata sulla parte superiore della pila e in esecuzione | Esegui l'immagine prodotta | Esegui l'immagine prodotta |
Kf sempre produce un'immagine completa ed eseguibile come risultato del 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
sono presenti tre campi da esaminare:
- Buildpacks V2 contiene un elenco di buildpack compatibili con V2 nell'ordine in cui verranno eseguiti
- Stacks 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 le serie 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 builder con esattamente i buildpack a cui devono avere accesso. Puoi anche utilizzare le immagini del builder pubblicate da altri autori.
Utilizzare un'immagine del builder 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 in modo che utilizzi lo stack pubblicato da Heroku, modifica il ConfigMap config-defaults
nello spazio dei nomi kf
.
Aggiungi una voce alla chiave spaceStacksV3
come la seguente:
$ 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
Quindi, 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
Creare un'immagine del tuo creator
L'interfaccia a riga di comando Buildpack pack
viene utilizzata per creare la tua immagine del builder. Per creare la tua immagine del builder, puoi seguire la documentazione di Utilizzo dei builder con create-builder
di pack
. Una volta creato, esegui il push in un registry dei container e aggiungilo al ConfigMap config-defaults
.
Impostazione di uno stack predefinito
Alle app verrà assegnato uno stack predefinito se non ne viene fornito uno nel file manifest. Lo stack predefinito è il primo nell'elenco di stack V2 o V3. Se non viene ignorato, viene scelto uno stack V2 per la compatibilità con Cloud Foundry.
Puoi forzare Kf a utilizzare uno stack V3 anziché V2 impostando il campo spaceDefaultToV3Stack
nel ConfigMap config-defaults
nell'namespace kf
su "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 non è impostato, viene utilizzato il valore del ConfigMap config-defaults
.
Valore config-defaults per spaceDefaultToV3Stack |
spec.buildConfig.defaultToV3Stack dello spazio |
Pila predefinita |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
any | false |
V2 |
any | true |
V3 |