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 |