Kf 會使用 Buildpacks 將應用程式的原始碼轉換為可執行的映像檔。Cloud Native Buildpacks 使用最新的 Buildpack API v3,而 VMware 和 Heroku 等公司也積極為現有 Buildpack 新增 v3 支援。
Kf 支援符合 Buildpack API 規格的 V2 和 V3 的 Buildpack。
比較 V2 和 V3 buildpacks
V2 Buildpacks | V3 Buildpacks | |
---|---|---|
其他名稱 | Cloud Foundry Buildpack | 雲端原生 Buildpacks (CNB)、建構工具映像檔 |
狀態 | 正在取代 | 目前 |
成本 | Cloud Foundry | Buildpacks.io |
堆疊 | 由建構工具和執行階段共用 | 可選為建構工具和執行階段提供不同的值 |
本機開發 | 不可行 | 可以,只要使用 pack CLI |
自訂建構套件 | 可在執行階段使用 | 必須建構至建構工具 |
Buildpack 生命週期
步驟 | Cloud Foundry | Kf 與 Buildpacks V2 | Kf 與 Buildpacks V3 |
---|---|---|---|
來源位置 | BITS 服務 | Container Registry | Container Registry |
Buildpack 位置 | BOSH/HTTP | HTTP | Container Registry |
堆疊位置 | BOSH | Container Registry | Container Registry |
結果 | 滴流 (沒有堆疊的應用程式二進位檔) | 圖片 (Droplet 在堆疊上) | 圖片 |
執行階段 | 水滴黏在堆疊上方並執行 | 執行產生的映像檔 | 執行產生的映像檔 |
在建構程序中,Kf 一律會產生完整的可執行映像檔。另一方面,Cloud Foundry 會在建構期間產生可執行映像檔的部分,其餘部分則會在執行階段新增。
Kf 選擇採用一律產生完整圖片的模型,原因如下:
- 您可以匯出映像檔、在本機上執行,並靜態檢查
- 運用二進位授權等工具,提升安全性和稽核功能
- 可重現應用程式部署作業
Kf 和 Buildpacks
Kf 會將全域的 Buildpack 和堆疊清單儲存在 kf
命名空間的 config-defaults
ConfigMap 中。每個工作區都會在狀態欄位中反映這些 Buildpack。對於名為 buildpack-docs
的空間,您可以執行以下指令,查看完整的空間設定:
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
在 Build Config
部分下方,有三個欄位可供查看:
- Buildpacks V2 包含 V2 相容的 Buildpacks 清單,並按照執行順序列出
- 堆疊 V2 會指出可用來觸發 V2 建構包建構作業的堆疊
- 堆疊 V3 代表可用來觸發 V3 buildpack 建構作業的堆疊
您也可以使用 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
由於 V3 建構映像檔已內建建構包,因此您必須使用 kf buildpacks
取得清單:
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 ...
自訂 V3 建構套件
您可以建立自己的建構工具映像檔,並在其中加入開發人員應具備存取權的建構包,藉此自訂開發人員可使用的建構包。您也可以使用其他作者發布的建構工具映像檔。
使用第三方建構工具映像檔
您可以透過 Buildpack CLI pack
查看已發布的 CNB 堆疊清單。截至本文撰寫時,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
如要修改 Kf 以使用 Heroku 發布的堆疊,請編輯 kf
命名空間中的 config-defaults
ConfigMap。在 spaceStacksV3
索引鍵中新增項目,如下所示:
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
接著,再次執行 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 V3 heroku-18 heroku/pack:18-build heroku/pack:18 The official Heroku stack based on Ubuntu 18.04
建立自己的建構工具映像檔
Buildpack CLI pack
可用於建立自己的建構工具映像檔。您可以按照 pack
的「使用 create-builder
的建構工具」說明文件建立自己的建構工具映像檔。建立後,請將其推送至容器登錄檔,並使用該檔案新增至 config-defaults
ConfigMap。
設定預設堆疊
如果應用程式未在資訊清單中提供預設堆疊,系統會為其指派預設堆疊。預設堆疊是 V2 或 V3 堆疊清單中的第一個堆疊。除非覆寫,否則會選擇 V2 堆疊,以便與 Cloud Foundry 相容。
您可以強制 Kf 使用 V3 堆疊,而非 V2,方法是在 kf
命名空間的 config-defaults
ConfigMap 中,將 spaceDefaultToV3Stack
欄位設為 "true"
:
kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
您也可以針對每個聊天室修改這個選項,方法是將 spec.buildConfig.defaultToV3Stack
欄位設為 true
或 false
。如果未設定,系統會使用 config-defaults
ConfigMap 中的值。
spaceDefaultToV3Stack 的 config-defaults 值 |
聊天室的 spec.buildConfig.defaultToV3Stack |
預設堆疊 |
---|---|---|
未設定 | 未設定 | V2 |
"false" |
未設定 | V2 |
"true" |
未設定 | V3 |
any | false |
V2 |
any | true |
V3 |