I buildpack vengono utilizzati da Kf per trasformare il codice sorgente di un'applicazione in un'immagine eseguibile. I buildpack Cloud Native utilizzano la versione più recente dell'API Buildpack v3. Le aziende stanno aggiungendo attivamente il supporto della versione 3 ai buildpack esistenti.
Kf supporta i buildpack conformi sia alla v2 che alla v3 della specifica dell'API Buildpack.
Confronta i buildpack V2 e V3
| Buildpack V2 | Buildpack V3 | |
|---|---|---|
| Nomi alternativi | Buildpack Cloud Foundry | Buildpack cloud-native (CNB), immagini del generatore |
| 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 buildpack 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. La modifica delle proprietà buildpack e stack deve essere eseguita nella risorsa personalizzata kfsystem. L'operatore Kf aggiorna automaticamente il ConfigMap config-defaults in base ai valori impostati in kfsystem.
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-docsGetting 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 stacksGetting 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 buildpacksGetting 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 ...
Personalizzare i 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.
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-stacksStacks 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:18Stack 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-cnbStack 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-cnbStack 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 la risorsa personalizzata kfsystem, che aggiorna automaticamente il ConfigMap config-defaults nello spazio dei nomi kf.
Aggiungi una voce alla chiave spaceStacksV3 come la seguente:
kubectl edit kfsystem kfsystemspaceStacksV3: | - 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 stacksGetting 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. Puoi seguire la documentazione Utilizzo dei builder con create-builder di pack per creare la tua immagine del builder. Dopo averlo creato, caricalo in un
registro dei contenitori e aggiungilo alla kfsystem risorsa personalizzata.
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 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 nella risorsa personalizzata kfsystem su "true" (kfsystem aggiorna automaticamente il campo spaceDefaultToV3Stack corrispondente nel ConfigMap config-defaults):
kubectl edit kfsystem kfsystemspaceDefaultToV3Stack: "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 |