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 fügen aktiv v3-Support zu vorhandenen Buildpacks hinzu.
Kf unterstützt Buildpacks, die sowohl V2 als auch V3 der Buildpack API-Spezifikation entsprechen.
V2- und V3-Buildpacks vergleichen
V2-Buildpacks | 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
. Änderungen an den Attributen der Buildpacks und Stacks sollten unter der benutzerdefinierten kfsystem
-Ressource vorgenommen werden. Der Kf-Operator aktualisiert die ConfigMap config-defaults
automatisch anhand der unter kfsystem
festgelegten Werte.
Die einzelnen Pakete werden durch das Leerzeichen im Statusfeld angegeben.
Bei einem Space mit dem Namen buildpack-docs
könnten Sie den folgenden Befehl 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-Buildpacks 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
Um KF so zu ändern, das der von Heroku veröffentlichte Stack verwendet wird, bearbeiten Sie die benutzerdefinierte kfsystem
-Ressource. Dadurch wird die config-defaults
ConfigMap automatisch im Namespace kf
aktualisiert.
Fügen Sie dem Schlüssel spaceStacksV3
einen Eintrag wie diesen hinzu:
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
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. Sie können der pack
-Dokumentation Mit create-builder
mit Buildern arbeiten folgen, um ein eigenes Builder-Image zu erstellen. Verschieben Sie den Container nach dem Erstellen in eine Container Registry und fügen Sie ihn der benutzerdefinierten kfsystem
-Ressource 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 benutzerdefinierten kfsystem
-Ressource auf "true"
setzen (kfsystem
aktualisiert das entsprechende spaceDefaultToV3Stack
-Feld in der ConfigMap config-defaults
automatisch):
kubectl edit kfsystem kfsystem
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 |