Personalizzazione di stack e buildpack

I buildpack vengono utilizzati da Kf per trasformare l'origine di un'applicazione in un'immagine eseguibile. I buildpack cloud-native utilizzano le versioni API Buildpack v3. Le aziende 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 Buildpack cloud-native (CNB), immagini del generatore
Stato In fase di sostituzione Attuale
Proprietà Cloud Foundry Buildpacks.io
Impilare Condivisi da Builder e runtime Facoltativamente, differente per builder e 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 stack BOSH Container Registry Container Registry
Risultato Droplet (file binario dell'app senza stack) Immagine (goccia su una pila) Immagine
Runtime Goccia incollata sopra la pila e corri 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 creazione 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 grazie a strumenti come 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 effettuata nella risorsa personalizzata kfsystem. L'operatore Kf aggiorna automaticamente il ConfigMap config-defaults in base ai valori impostati su kfsystem.

Ogni spazio riflette questi buildpack nel proprio 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 è possibile scegliere per attivare una build 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 build V3 hanno già i buildpack integrati, devi utilizzare kf buildpacks per ottenere 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
  ...

Personalizzare i buildpack V3

Puoi personalizzare i buildpack disponibili per gli sviluppatori creando la tua immagine builder con esattamente i buildpack di cui dovrebbero a cui accedono. Puoi anche utilizzare le immagini del builder pubblicate da altri autori.

Utilizzare un'immagine del 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 in modo da utilizzare lo stack pubblicato da Heroku, modifica kfsystem risorsa personalizzata, che aggiorna automaticamente il ConfigMap config-defaults nello spazio dei nomi kf. Aggiungi una voce alla chiave spaceStacksV3 come segue:

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

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 le app di pack Collaborare con gli builder utilizzando create-builder per creare la tua immagine del builder. Dopo la creazione, esegui il push in un Container Registry e aggiungilo alla risorsa personalizzata kfsystem.

Imposta una pila predefinita

Alle app verrà assegnato uno stack predefinito, se non è specificato 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.

È possibile forzare Kf a utilizzare uno stack V3 anziché V2 impostando il parametro Campo spaceDefaultToV3Stack nella risorsa personalizzata kfsystem in modo che sia "true" (kfsystem aggiorna automaticamente il campo spaceDefaultToV3Stack corrispondente nel ConfigMap config-defaults):

kubectl edit kfsystem kfsystem
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 Pila predefinita
non impostato non impostato V2
"false" non impostato V2
"true" non impostato V3
qualsiasi false V2
qualsiasi true V3

Passaggi successivi