Membandingkan V2 vs V3 Buildpacks

Buildpack mengonversi kode sumber menjadi file yang dapat dieksekusi, dan digunakan untuk memberikan cara yang sederhana, andal, dan dapat diulang untuk membuat container. Kf mendukung buildpack V2 dan V3, dan penting untuk memahami perbedaan di antara keduanya.

buildpack V2

Sebagian besar aplikasi Cloud Foundry sudah menggunakan buildpack V2. Saat menggunakan buildpack V2 dengan Kf, biner siklus proses dan buildpack akan didownload dan dikonfigurasi dari URL git mereka. Kf kemudian menggunakan CLI lifecycle untuk mengeksekusi setiap buildpack terhadap kode sumber.

Kelebihan

  • Siap digunakan tanpa perlu mengubah pipeline atau kode.

Kekurangan

  • Buildpack lama digantikan oleh V3.
  • Performa dan keandalan yang lebih rendah. Pipeline build Kf memerlukan lebih banyak IO untuk buildpack V2.
  • Lebih sedikit sumber daya komunitas.
  • Kf hanya mendukung repositori git OSS.

buildpack V3

Buildpack V3 adalah project Cloud Native Computing Foundation (CNCF) dengan spec yang jelas, CLI (paket), dan komunitas yang terus berkembang serta berinovasi dalam berbagai bahasa dan framework. Google Cloud juga memiliki kumpulan buildpack Google Cloud sendiri.

Buildpack V3 memiliki dua container OCI yang menyeluruh:

  • Gambar builder
  • Jalankan gambar

Gambar builder

Image builder digunakan saat kode sumber Anda sedang dibangun ke dalam container yang dapat dijalankan. Gambar memiliki skrip detect yang diperlukan dan utilitas lainnya untuk mengompilasi kode sumber.

Jalankan gambar

Image run adalah image dasar tempat container dibangun. Artinya, image tersebut adalah image dasar yang akan dijalankan saat Aplikasi dieksekusi.

Lapisan

Buildpack V3 menggunakan lapisan untuk menyusun container akhir. Setiap buildpack yang disertakan dalam build diberi kesempatan untuk memanipulasi sistem file dan variabel lingkungan Aplikasi. Pendekatan layering ini memungkinkan buildpack menjadi lebih tipis dan lebih generik.

Buildpack V3 di-build pada container OCI. Hal ini mengharuskan image builder V3 disimpan dalam container registry yang dapat diakses oleh pipeline build Kf. Pipeline build menggunakan image builder untuk menerapkan skrip yang mendasarinya guna membangun kode sumber ke dalam container yang dapat dijalankan.

Kelebihan

Kekurangan

  • Mungkin memerlukan pembaruan kode/proses. Misalnya, buildpack Java memerlukan kode sumber, sedangkan buildpack V2 memerlukan file jar.
  • Buildpack V3 lebih baru dan mungkin memerlukan validasi tambahan (menggunakan buildpack yang dikembangkan komunitas).

Tumpukan Kf

Lihat Tumpukan

Saat mendorong Aplikasi, pipeline build menentukan buildpack berdasarkan Stack yang dipilih (ditentukan melalui flag --stack atau manifes).

Untuk melihat Tumpukan mana yang tersedia dalam Ruang, terlebih dahulu pastikan Ruang ditargetkan:

kf target -s myspace

Subperintah kf stacks kemudian dapat digunakan untuk menampilkan Stack:

kf stacks

Output menampilkan Stack V2 dan V3:

Getting stacks in Space: myspace
Version  Name                                Build Image                                                                                          Run Image
V2       cflinuxfs3                          cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5      cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3       kf-v2-to-v3-shim                    gcr.io/kf-releases/v2-to-v3:v2.7.0                                                                   gcr.io/buildpacks/gcp/run:v1                                                                       This is a stack added by the integration tests to assert that v2->v3 shim works
V3       google                              gcr.io/buildpacks/builder:v1                                                                         gcr.io/buildpacks/gcp/run:v1                                                                       Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
V3       org.cloudfoundry.stacks.cflinuxfs3  cloudfoundry/cnb:cflinuxfs3@sha256:f96b6e3528185368dd6af1d9657527437cefdaa5fa135338462f68f9c9db3022  cloudfoundry/run:full-cnb@sha256:dbe17be507b1cc6ffae1e9edf02806fe0e28ffbbb89a6c7ef41f37b69156c3c2  A large Cloud Foundry stack based on Ubuntu 18.04

Mengonfigurasi Stack

Konfigurasi Stack dapat diperbarui dengan mengedit Resource Kustom kfsystem:

kubectl edit kfsystem kfsystem

Contoh ini menetapkan buildpack Google Cloud sebagai Stack V3:

spec:
  kf:
    config:
      spaceStacksV3:
      - name: google
        description: Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
        buildImage: gcr.io/buildpacks/builder:v1
        runImage: gcr.io/buildpacks/gcp/run:v1

Stack baru ini sekarang dapat dikirim:

kf push myapp --stack google

Contoh ini mengonfigurasi buildpack Ruby V2 dan menyetel default pipeline build untuk menggunakan V2 Stack:

spec:
  kf:
    config:
      spaceDefaultToV3Stack: false
      spaceBuildpacksV2:
      - name: ruby_buildpack
        url: https://github.com/cloudfoundry/ruby-buildpack
      spaceStacksV2:
      - name: cflinuxfs3
        image: cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5

Migrasi Buildpack V2 ke V3

Kf menyediakan stack V3 untuk mem-build aplikasi yang dibuat dengan buildpack V2 standar, menggunakan stack bernama kf-v2-to-v3-shim. Stack kf-v2-to-v3-shim dibuat dengan mengikuti API buildpacks V3 standar. Image builder yang dikelola Google dibuat dengan setiap rilis Kf, mengikuti proses buildpack standar. Image builder menggabungkan daftar buildpack V3 yang dibuat oleh proses yang sama dengan yang digunakan dengan perintah kf wrap-v2-buildpack. Image buildpack V3 dibuat menggunakan image buildpack V2 standar. Penting untuk dicatat bahwa buildpack V3 tidak berisi biner dari buildpack V2 yang direferensikan. Sebagai gantinya, image buildpack V2 direferensikan, dan bit-nya akan didownload pada waktu build Aplikasi (dengan menjalankan kf push).

Pada waktu build Aplikasi, buildpack V2 didownload dari repositori git yang sesuai. Saat deteksi V3 berjalan, ini didelegasikan ke skrip deteksi V2 yang didownload. Untuk grup buildpack pertama yang lulus deteksi, grup akan melanjutkan ke langkah build, yang mendelegasikan eksekusi build ke skrip builder V2 yang didownload.

Buildpack V2 berikut didukung dalam stack kf-v2-to-v3-shim:

Buildpack Repositori Git
java_buildpack https://github.com/cloudfoundry/java-buildpack
dotnet_core_buildpack https://github.com/cloudfoundry/dotnet-core-buildpack
nodejs_buildpack https://github.com/cloudfoundry/nodejs-buildpack
go_buildpack https://github.com/cloudfoundry/go-buildpack
python_buildpack https://github.com/cloudfoundry/python-buildpack
binary_buildpack https://github.com/cloudfoundry/binary-buildpack
nginx_buildpack https://github.com/cloudfoundry/nginx-buildpack

Opsi 1: Migrasikan Aplikasi yang dibuat dengan buildpack V2 standar

Untuk membuat Aplikasi dengan stack kf-v2-to-v3-shim, gunakan perintah berikut:

kf push myapp --stack kf-v2-to-v3-shim

Stack kf-v2-to-v3-shim akan otomatis mendeteksi runtime dengan buildpack V2 yang digabungkan. Image Aplikasi yang dihasilkan dibuat menggunakan standar V3 dan pipeline build, tetapi merupakan builder dari buildpack V2 yang setara.

Opsi 2: Migrasikan Aplikasi yang dibuat dengan buildpack V2 khusus

Kf memiliki alat migrasi buildpack yang dapat mengambil buildpack V2 dan menggabungkannya dengan buildpack V3. Buildpack yang digabungkan kemudian dapat digunakan di mana pun buildpack V3 tersedia.

kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publish

Tindakan ini akan membuat image buildpack bernama gcr.io/your-project/v2-go-buildpack. Kode ini kemudian dapat digunakan untuk membuat builder dengan mengikuti dokumen membuat builder.

Subperintah ini menggunakan CLI berikut secara transparan:

  • go
  • git
  • pack
  • unzip

Sebaiknya gunakan Cloud Shell Editor untuk memastikan setiap subperintah tersedia di jalur yang benar dan merupakan versi yang benar.

Masalah umum

Berikut adalah fitur yang belum berfungsi dengan Kf. Jika ada salah satu prioritas tinggi untuk organisasi Anda, hubungi Sales Rep Anda:

  • Registry container pribadi untuk image builder V3.
  • Penyimpanan dalam cache V3.
  • Buildpack V2 yang memerlukan kredensial git.