Buildpack digunakan oleh Kf untuk mengubah kode sumber aplikasi menjadi image yang dapat dieksekusi. Cloud Native Buildpacks menggunakan Buildpack API v3 terbaru dan perusahaan termasuk VMware dan Heroku secara aktif menambahkan dukungan v3 ke buildpack yang ada.
Kf mendukung Buildpack yang sesuai dengan spesifikasi Buildpack API V2 dan V3.
Perbandingan antara buildpack V2 dan V3
Buildpack V2 | Buildpack V3 | |
---|---|---|
Nama alternatif | Buildpack Cloud Foundry | Buildpack Berbasis Cloud (CNB), Image Builder |
Status | Sedang Diganti | Saat ini |
Kepemilikan | Cloud Foundry | Buildpacks.io |
Stack | Dibagikan oleh builder dan runtime | Opsional berbeda untuk builder dan runtime |
Pengembangan lokal | Tidak memungkinkan | Ya, dengan pack CLI |
Buildpack kustom | Tersedia saat runtime | Harus di-build ke dalam builder |
Siklus proses buildpack
Langkah | Cloud Foundry | Kf dengan Buildpack V2 | Kf dengan Buildpack V3 |
---|---|---|---|
Lokasi sumber | Layanan BITS | Container registry | Container registry |
Lokasi buildpack | BOSH/HTTP | HTTP | Container registry |
Lokasi stack | BOSH | Container registry | Container registry |
Hasil | Droplet (Biner aplikasi tanpa stack) | Gambar (Droplet di stack) | Gambar |
Runtime | Tetesan dilem di atas tumpukan dan dijalankan | Menjalankan gambar yang dihasilkan | Menjalankan gambar yang dihasilkan |
Kf selalu menghasilkan image lengkap 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 menghasilkan gambar lengkap karena alasan berikut:
- Image dapat diekspor, dijalankan secara lokal, dan diperiksa secara statis
- Keamanan dan audit yang lebih baik dengan alat seperti otorisasi biner
- Deployment aplikasi dapat direproduksi
Kf dan Buildpack
Kf menyimpan daftar buildpack dan stack globalnya di ConfigMap config-defaults
di Namespace kf
.
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 perlu dilihat:
- Buildpack V2 berisi daftar buildpack yang kompatibel dengan V2 dalam urutan yang akan dijalankan
- Stacks V2 menunjukkan stack yang dapat dipilih untuk memicu build buildpack V2
- Stacks 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 daftarnya:
$ 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 dapat menggunakan image builder yang dipublikasikan oleh penulis lain.
Menggunakan image builder pihak ketiga
Daftar stack CNB yang dipublikasikan tersedia dari Buildpack CLI pack
. Saat penulisan ini, output pack suggest-stacks
:
$ 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 mengubah Kf agar menggunakan stack yang dipublikasikan oleh Heroku, edit ConfigMap config-defaults
di Namespace kf
.
Tambahkan entri ke kunci spaceStacksV3
seperti berikut:
$ 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
Kemudian, 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 image builder Anda sendiri
Buildpack CLI pack
digunakan untuk membuat image builder Anda sendiri. Anda dapat mengikuti dokumentasi Menggunakan builder menggunakan create-builder
pack
untuk membuat image builder Anda sendiri. Setelah dibuat, kirim ke container registry dan gunakan untuk menambahkannya ke ConfigMap config-defaults
.
Menetapkan stack default
Aplikasi akan diberi stack default jika tidak disediakan dalam manifesnya. Stack default adalah yang pertama dalam daftar stack V2 atau V3. Kecuali jika diganti, stack V2 akan dipilih untuk kompatibilitas dengan Cloud Foundry.
Anda dapat memaksa Kf untuk menggunakan stack V3, bukan V2, dengan menetapkan
kolom spaceDefaultToV3Stack
di ConfigMap config-defaults
di Namespace
kf
menjadi "true"
:
$ kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Opsi ini juga dapat diubah berdasarkan Ruang dengan mengubah setelan
kolom spec.buildConfig.defaultToV3Stack
menjadi true
atau false
. Jika tidak ditetapkan, nilai dari ConfigMap config-defaults
akan digunakan.
Nilai config-defaults untuk spaceDefaultToV3Stack |
spec.buildConfig.defaultToV3Stack Ruang |
Stack default |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
apa pun | false |
V2 |
apa pun | true |
V3 |