Menyesuaikan stack dan buildpack

Buildpack digunakan oleh Kf untuk mengubah kode sumber aplikasi menjadi image yang dapat dieksekusi. Buildpack Berbasis Cloud menggunakan Buildpack API v3 terbaru. Perusahaan secara aktif menambahkan dukungan v3 ke buildpack yang ada.

Kf mendukung buildpack yang sesuai dengan V2 dan V3 dari spesifikasi Buildpack API.

Membandingkan buildpack V2 dan V3

buildpack V2 buildpack V3
Nama alternatif Buildpack Cloud Foundry Buildpack Berbasis Cloud (CNB), Gambar Builder
Status Sedang diganti Saat ini
Kepemilikan Cloud Foundry Buildpacks.io
Tumpuk Dibagikan oleh builder dan runtime Secara opsional, berbeda untuk builder dan runtime
Pengembangan lokal Tidak mungkin Ya, dengan pack CLI
Buildpack kustom Tersedia saat runtime Harus dibuat dalam builder

Siklus proses buildpack

Langkah Cloud Foundry Kf dengan buildpacks V2 Kf dengan buildpacks V3
Lokasi sumber Layanan BITS Container registry Container registry
Lokasi buildpack BOSH/HTTP HTTP Container registry
Lokasi tumpukan BOSH Container registry Container registry
Hasil Droplet (Biner aplikasi tanpa stack) Gambar (Droplet pada tumpukan) Gambar
Runtime Tetesan terpaku di atas tumpukan dan berlari Jalankan gambar yang dihasilkan Jalankan gambar yang dihasilkan

Kf always menghasilkan image penuh yang dapat dieksekusi sebagai hasil dari proses build-nya. Di sisi lain, Cloud Foundry menghasilkan bagian dari image yang dapat dieksekusi pada waktu build dan sisanya ditambahkan saat runtime.

Kf memilih untuk mengikuti model yang selalu memproduksi gambar penuh karena alasan berikut:

  • Gambar dapat diekspor, dijalankan secara lokal, dan diperiksa secara statis
  • Keamanan dan pengauditan yang lebih baik dengan alat seperti otorisasi biner
  • Deployment aplikasi dapat direproduksi

Kf dan buildpack

Kf menyimpan daftar global buildpack dan stack-nya di ConfigMap config-defaults di Namespace kf. Modifikasi properti buildpack dan stack harus dilakukan di Resource Kustom kfsystem. Operator Kf akan otomatis memperbarui config-defaults ConfigMap berdasarkan nilai yang ditetapkan di kfsystem.

Setiap Ruang mencerminkan buildpack ini di kolom statusnya. Untuk Ruang bernama buildpack-docs, Anda dapat menjalankan perintah berikut untuk melihat konfigurasi Ruang lengkap:

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

Di bagian Build Config, ada tiga kolom yang harus dilihat:

  • Buildpacks V2 berisi daftar buildpack yang kompatibel dengan V2 sesuai urutannya
  • Stack V2 menunjukkan stack yang dapat dipilih untuk memicu build buildpack V2
  • Stack V3 menunjukkan stack yang dapat dipilih untuk memicu build buildpack V3

Anda juga dapat mencantumkan stack dengan 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

Karena image build V3 sudah memiliki buildpack bawaan, Anda harus menggunakan kf buildpacks untuk mendapatkan daftar:

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
  ...

Menyesuaikan buildpack V3

Anda dapat menyesuaikan buildpack yang tersedia untuk developer dengan membuat image builder Anda sendiri dengan buildpack yang harus mereka akses. Anda juga bisa menggunakan gambar builder yang diterbitkan oleh penulis lain.

Gunakan gambar pembuat pihak ketiga

Daftar stack CNB yang dipublikasikan tersedia dari Buildpack CLI pack. Pada saat penulisan ini, pack suggest-stacks menghasilkan:

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

Untuk memodifikasi Kf agar dapat menggunakan stack yang dipublikasikan oleh Heroku, edit Resource Kustom kfsystem, yang akan otomatis mengupdate config-defaults ConfigMap di Namespace kf. Tambahkan entri ke kunci spaceStacksV3 seperti berikut:

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

Lalu, jalankan stacks lagi:

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

Membuat gambar builder Anda sendiri

Buildpack CLI pack digunakan untuk membuat image builder Anda sendiri. Anda dapat mengikuti dokumentasi packBekerja dengan builder menggunakan create-builder untuk membuat image builder Anda sendiri. Setelah dibuat, kirim ke container registry dan tambahkan ke Resource Kustom kfsystem.

Menetapkan stack default

Aplikasi akan diberi stack default jika tidak disediakan dalam manifesnya. Tumpukan default adalah yang pertama dalam daftar tumpukan V2 atau V3. Kecuali jika diganti, stack V2 dipilih untuk kompatibilitas dengan Cloud Foundry.

Anda dapat memaksa Kf untuk menggunakan stack V3, bukan V2, dengan menetapkan kolom spaceDefaultToV3Stack di Resource Kustom kfsystem menjadi "true" (kfsystem secara otomatis memperbarui kolom spaceDefaultToV3Stack yang sesuai di config-defaults ConfigMap):

kubectl edit kfsystem kfsystem
spaceDefaultToV3Stack: "true"

Opsi ini juga dapat diubah per Ruang dengan mengubah setelan kolom spec.buildConfig.defaultToV3Stack menjadi true atau false. Jika tidak disetel, nilai dari ConfigMap config-defaults akan digunakan.

Nilai config-defaults untuk spaceDefaultToV3Stack spec.buildConfig.defaultToV3Stack untuk ruang Tumpukan default
tidak disetel tidak disetel V2
"false" tidak disetel V2
"true" tidak disetel V3
apa pun false V2
apa pun true V3

Langkah selanjutnya