Buildpack 可將原始碼轉換為可執行檔,並提供簡單、可靠且可重複執行的容器建立方式。Kf 支援 V2 和 V3 建構包,因此請務必瞭解兩者的差異。
V2 buildpacks
大多數 Cloud Foundry 應用程式都已使用 V2 建構包。使用 Kf 搭配 V2 建構包時,系統會從 Git 網址下載並設定生命週期二進位檔和建構包。接著,Kf 會使用 lifecycle
CLI 針對原始碼執行每個建構包。
優點
- 無須變更管道或程式碼,即可立即使用。
缺點
- 舊版 Buildpack,已由 V3 取代。
- 效能和穩定性較差。Kf 建構管道需要更多 I/O 才能處理 V2 建構包。
- 社群資源較少。
- Kf 僅支援 OSS Git 存放區。
V3 buildpacks
V3 Buildpacks 是 Cloud Native Computing Foundation (CNCF) 專案,具有明確的規格、CLI (pack),以及不斷成長的社群,專門針對不同語言和架構進行創新。 Google Cloud 也有自己的 Google Cloud Buildpacks。
V3 建構包有兩個主要的 OCI 容器:
- 建構工具映像檔
- 執行映像檔
建構工具映像檔
在原始碼建構為可執行容器時,會使用建構工具映像檔。映像檔包含編譯原始碼所需的 detect
指令碼和其他公用程式。
執行映像檔
執行映像檔是容器建構時所用的基礎映像檔。也就是說,這是應用程式執行時會執行的基本映像檔。
資料層
V3 建構包會使用層來組合最終容器。每個建構包都會在建構期間有機會操控應用程式的檔案系統和環境變數。這種分層方法可讓建構包變得更精簡、更通用。
V3 建構包是根據 OCI 容器建構而成。這項操作要求 V3 建構工具映像檔必須儲存在 Kf 建構管道可存取的容器註冊資料庫中。建構管道會使用建構工具映像檔套用基礎指令碼,將原始碼建構為可執行的容器。
優點
- Google 支援建構工具和執行映像檔。
- 可與 Cloud Build 等各種 Google Cloud 產品搭配使用。
- 擴大社群和Buildpack Registry。
缺點
- 可能需要更新程式碼/程序。舉例來說,Java 建構包需要原始碼,而 V2 建構包則需要 JAR 檔案。
- V3 建構包較新,可能需要額外驗證 (使用社群開發的建構包)。
Kf 堆疊
查看分疊
推送應用程式時,建構管道會根據所選堆疊 (透過 --stack
標記或資訊清單指定) 決定 Buildpack。
如要查看聊天室可用的 Stack,請先確認指定的聊天室:
kf target -s myspace
接著,您可以使用 kf stacks
子指令列出資料堆疊:
kf stacks
輸出結果會同時顯示 V2 和 V3 堆疊:
Getting stacks in Space: myspace
Version Name Build Image Run Image Description
V2 cflinuxfs3 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
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
設定堆疊
您可以編輯 kfsystem
自訂資源來更新堆疊設定:
kubectl edit kfsystem kfsystem
本範例會設定 Google Cloud buildpacks 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
這個新堆疊現在可以推送:
kf push myapp --stack google
本範例會設定 Ruby V2 建構包,並將建構管道預設值設為使用 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
遷移
注意:這項功能目前為實驗功能,可能會有變動。
Kf 有遷移工具,可包裝 V2 建構包。結果是可在 V3 建構工具中使用的 V3 Buildpack。這樣一來,您就能在 V3 建構包可用的任何地方使用這個包裝的建構包。
kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publish
這會建立名為 gcr.io/your-project/v2-go-buildpack
的 Buildpack 映像檔。接著,您可以按照「建立建構工具」文件中的說明,使用該檔案建立建構工具。
這個子指令會透明地使用下列 CLI:
go
git
pack
建議您使用 Cloud Shell 編輯器,確保每個子指令都位於正確的路徑,且為正確的版本。
已知問題
以下功能尚未與 Kf 搭配運作。如果貴機構有高優先順序的需求,請與業務代表聯絡:
- 適用於 V3 建構工具映像檔的私人容器登錄檔。
- V3 快取。
- 需要 Git 憑證的 V2 建構包。