Membandingkan Buildpack V2 vs V3

buildpack mengonversi kode sumber menjadi file yang dapat dieksekusi, dan digunakan untuk memberikan cara yang sederhana, andal, dan berulang 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 didownload serta dikonfigurasi dari URL git-nya. Kf kemudian menggunakan lifecycle CLI untuk mengeksekusi setiap buildpack terhadap kode sumber.

Kelebihan

  • Siap digunakan tanpa perubahan pipeline atau kode.

Kekurangan

  • Buildpack lama diganti dengan V3.
  • Performa dan keandalan yang lebih lemah. Pipeline build Kf memerlukan lebih banyak IO untuk buildpack V2.
  • Lebih sedikit referensi komunitas.
  • Kf hanya mendukung repo git OSS.

Buildpack V3

Buildpack V3 adalah project Cloud Native Computing Foundation (CNCF) dengan spesifikasi yang ditentukan dengan baik, CLI (paket), dan komunitas yang berkembang yang berinovasi di berbagai bahasa dan framework. Google Cloud juga memiliki kumpulan buildpack Google Cloud sendiri.

Buildpack V3 memiliki dua penampung OCI menyeluruh:

  • Image builder
  • Menjalankan gambar

Image builder

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

Menjalankan gambar

Image run adalah image dasar tempat container di-build. Artinya, ini adalah image dasar yang akan berjalan saat Aplikasi dieksekusi.

Lapisan

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

Buildpack V3 dibuat di container OCI. Hal ini mengharuskan image builder V3 disimpan di registry container yang memiliki akses ke pipeline build Kf. Pipeline build menggunakan image builder untuk menerapkan skrip yang mendasarinya guna mem-build kode sumber menjadi 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).

Kf Stacks

Melihat Stack

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

Untuk melihat Stack yang tersedia di Ruang, pastikan Ruang ditargetkan terlebih dahulu:

kf target -s myspace

Subperintah kf stacks kemudian dapat digunakan untuk mencantumkan 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 Stack V3 ke buildpack Google Cloud:

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 kini dapat di-push:

kf push myapp --stack google

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

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 di-build dengan buildpack V2 standar, menggunakan stack bernama kf-v2-to-v3-shim. Stack kf-v2-to-v3-shim dibuat dengan mengikuti API buildpack 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. Perlu diperhatikan bahwa buildpack V3 tidak berisi biner buildpack V2 yang dirujuk. Sebagai gantinya, image buildpack V2 direferensikan, dan bit didownload pada waktu build Aplikasi (dengan menjalankan kf push).

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

Buildpack V2 berikut didukung di 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: Memigrasikan Aplikasi yang di-build dengan buildpack V2 standar

Untuk mem-build 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 builder dari buildpack V2 yang setara.

Opsi 2: Memigrasikan Aplikasi yang dibuat dengan buildpack V2 kustom

Kf memiliki alat migrasi buildpack yang dapat mengambil buildpack V2 dan menggabungkannya dengan buildpack V3. Buildpack yang digabungkan kemudian dapat digunakan di mana saja 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. Kemudian, kode ini 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 salah satunya memiliki prioritas tinggi bagi organisasi Anda, hubungi Sales Rep Anda:

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