Stacks und Buildpacks anpassen

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

Nächste Schritte