Buildpacks werden von Kf verwendet, um den Quellcode einer Anwendung in ein ausführbares Image umzuwandeln. Cloud Native Buildpacks verwenden die neueste Buildpack API v3. Unternehmen und VMware und Heroku nutzen aktiv v3-Support für vorhandene Buildpacks.
Kf unterstützt Buildpacks, die sowohl V2 als auch V3 der Buildpack API-Spezifikation entsprechen.
Vergleich zwischen Buildpacks V2 und V3
| V2-Build-Pakete | V3-Build-Pakete | |
|---|---|---|
| Alternative Namen | Cloud Foundry-Build-Pakete | Cloudnative Build-Pakete (CNB), Builder-Images | 
| Status | Wird ersetzt | Aktuell | 
| Eigentümer | Cloud Foundry | Buildpacks.io | 
| Stapel | Von Builder und Laufzeit gemeinsam genutzt | Optional für Builder und Laufzeit | 
| Lokale Entwicklung | Nicht möglich | Ja, mit der Befehlszeile pack | 
| Kundenspezifische Build-Pakete | Zur Laufzeit verfügbar | Muss in den Builder integriert sein | 
Buildpack-Lebenszyklus
| Schritt | Cloud Foundry | Kf mit Buildpacks V2 | Kf mit Buildpacks V3 | 
|---|---|---|---|
| Quellort | BITS-Dienst | Container Registry | Container Registry | 
| Speicherort des Buildpacks | BOSH/HTTP | HTTP | Container Registry | 
| Stack-Speicherort | BOSH | Container Registry | Container Registry | 
| Ergebnis | Droplet (Anwendungsbinärdatei ohne Stack) | Image (Droplet auf einem Stack) | Image | 
| Laufzeit | Droplet auf Stack zusammengefügt und ausführen | Generiertes Image ausführen | Generiertes Image ausführen | 
Kf erzeugt immer aufgrund seines Build-Prozesses ein vollständiges, ausführbares Image. Cloud Foundry erzeugt hingegen Teile eines ausführbaren Image zur Build-Zeit und der Rest wird zur Laufzeit hinzugefügt.
Kf hat sich aus folgenden Gründen für das Modell entschieden, das immer ein vollständiges Image produziert:
- Images können exportiert, lokal ausgeführt und statisch geprüft werden
 - Mehr Sicherheit und Prüfung mit Tools wie der Binärautorisierung
 - Anwendungsbereitstellungen sind reproduzierbar
 
Kf- und Build-Packs
Kf speichert die globale Liste der Buildpacks und Stacks in der ConfigMap config-defaults im Namespace kf.
Die einzelnen Pakete werden durch das Leerzeichen im Statusfeld angegeben.
Bei einem Space mit dem Namen buildpack-docs könntest du den folgenden Space ausführen, um die gesamte Space-Konfiguration aufzurufen:
$ 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
Im Abschnitt Build Config gibt es drei Felder, die Sie sich ansehen sollten:
- Buildpacks V2 enthält eine Liste der V2-kompatiblen Buildpacks in der Reihenfolge, in der sie ausgeführt werden.
 - Stacks V2 gibt die Stacks an, die zum Auslösen eines Build von Buildpack V2 ausgewählt werden können.
 - Stacks V3 gibt die Stacks an, die zum Auslösen eines Build von Buildpack V3 ausgewählt werden können.
 
Sie können die Stacks auch mit kf stacks auflisten:
$ 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
Da die V3-Build-Images bereits integriert sind, müssen Sie kf buildpacks zum Abrufen der Liste verwenden:
$ 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
  ...
V3-Build-Pakete anpassen
Sie können die für Ihre Entwickler verfügbaren Buildpacks anpassen. Dazu erstellen Sie Ihr eigenes Builder-Image genau mit den Build-Paketen, auf die sie Zugriff haben sollen. Sie können auch Builder-Images verwenden, die von anderen Autoren veröffentlicht wurden.
Drittanbieter-Builder-Image verwenden
Eine Liste der veröffentlichten CNB-Stacks finden Sie in der Buildpack-Befehlszeile pack. Zum Zeitpunkt der Erstellung dieses Dokuments gibt pack suggest-stacks Folgendes aus:
$ 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
Bearbeiten Sie die config-defaults-ConfigMap im kf-Namespace, um Kf so zu verwenden, dass der von Heroku veröffentlichte Stack verwendet wird.
Fügen Sie dem Schlüssel spaceStacksV3 einen Eintrag wie diesen hinzu:
$ 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
Führen Sie dann stacks noch einmal aus:
$ 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
Eigenes Builder-Image erstellen
Mit der Buildpack-Befehlszeile pack können Sie ein eigenes Builder-Image erstellen. Du kannst der pack-Dokumentation Mit create-builder mit Buildern arbeiten folgen, um ein eigenes Builder-Image zu erstellen. Wenn es erstellt ist, laden Sie es in eine Container Registry hoch und fügen es der ConfigMap config-defaults hinzu.
Standard-Stack festlegen
Anwendungen werden ein Standardstapel zugewiesen, wenn im Manifest keine Anwendung angegeben ist. Der Standard-Stack ist der erste in der Liste der V2- oder V3-Stacks. Sofern nicht überschrieben, wird ein V2-Stack zur Kompatibilität mit Cloud Foundry ausgewählt.
Sie können erzwingen, dass Kf einen V3-Stack anstelle von V2 verwendet, indem Sie das Feld spaceDefaultToV3Stack in der ConfigMap config-defaults im Namespace kf auf "true" setzen:
$ kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Sie können diese Option auch für jeden Raum ändern. Dazu ändern Sie das Feld spec.buildConfig.defaultToV3Stack auf true oder false. Wenn kein Wert festgelegt ist, wird der Wert der ConfigMap config-defaults verwendet.
config-defaults-Wert für spaceDefaultToV3Stack | 
spec.buildConfig.defaultToV3Stack des Bereichs | 
Standard-Stack | 
|---|---|---|
| unset | unset | V2 | 
"false" | 
unset | V2 | 
"true" | 
unset | V3 | 
| Beliebig | false | 
V2 | 
| Beliebig | true | 
V3 |