Kf は Buildpack を使用して、アプリケーションのソースコードを実行可能なイメージに変換します。Cloud Native Buildpack は最新の Buildpack API v3 を使用し、VMware や Heroku などの企業は既存の Buildpack に v3 のサポートを積極的に追加しています。
Kf は、Buildpack API 仕様の V2 と V3 の両方に準拠した Buildpack をサポートしています。
V2 と V3 の Buildpack の比較
| V2 Buildpack | V3 Buildpack | |
|---|---|---|
| 代替名 | Cloud Foundry Buildpack | Cloud Native Buildpack(CNB)、ビルダー イメージ | 
| ステータス | 置き換えられる予定 | 現在 | 
| オーナー権限 | Cloud Foundry | Buildpacks.io | 
| Stack | ビルダーとランタイムで共有 | 必要に応じて、ビルダーとランタイムで異なる | 
| ローカルでの開発 | なし | pack CLI を使用して可能 | 
| Custom Buildpack | ランタイム時に利用可能 | ビルダーに組み込む必要があり | 
Buildpack のライフサイクル
| ステップ | Cloud Foundry | Buildpack V2 を使用した Kf | Buildpack V3 を使用した Kf | 
|---|---|---|---|
| ソースの場所 | BITS サービス | Container Registry | Container Registry | 
| Buildpack のロケーション | BOSH / HTTP | HTTP | Container Registry | 
| スタックのロケーション | BOSH | Container Registry | Container Registry | 
| 結果 | Droplet(スタックのないアプリバイナリ) | イメージ(スタック上の Droplet) | イメージ | 
| ランタイム | Droplet がスタックに付けられ、実行される | 実行で生成されるイメージ | 実行で生成されるイメージ | 
Kf は、ビルドプロセスの結果として常に完全な実行可能イメージを生成します。一方、Cloud Foundry はビルド時に実行可能イメージの一部を生成し、残りはランタイム時に追加されます。
kf は、次の理由で完全なイメージを常に生成するモデルを採用しました。
- イメージのエクスポート、ローカルでの実行、静的な検査が可能
 - Binary Authorization などのツールによるセキュリティと監査の向上
 - アプリのデプロイが再現可能
 
Kf と Buildpack
Kf は、Buildpack とスタックのグローバル リストを kf 名前空間の config-defaults ConfigMap に保存します。各空間のステータス フィールドに、これらの Buildpack が反映されます。buildpack-docs という名前の空間の場合、次のコマンドを実行して、完全な空間の構成を確認できます。
kf space buildpack-docsGetting 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 セクションには、次の 3 つの項目があります。
- Buildpack V2 には、V2 互換の Buildpack のリストが実行順に表示されます。
 - スタック V2 は、V2 Buildpack のビルドをトリガーするために選択できるスタックを示します。
 - スタック V3 は、V3 Buildpack のビルドをトリガーするために選択できるスタックを示します。
 
kf stacks でスタックの一覧表示も行えます。
kf stacksGetting 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 ビルドイメージには Buildpack が組み込まれているため、リストを取得するには kf buildpacks を使用する必要があります。
kf buildpacksGetting 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 のカスタマイズ
デベロッパーがアクセスできる Buildpack をカスタマイズするには、デベロッパーがアクセスできる Buildpack のみを使用して独自のビルダー イメージを作成します。他の作成者が公開したビルダー イメージを使用することもできます。
サードパーティのビルダー イメージを使用する
Buildpack CLI pack から、公開された CNB スタックのリストを利用できます。現時点で、pack suggest-stacks の出力は次のようになります。
pack suggest-stacksStacks 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:18Stack 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-cnbStack 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-cnbStack 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
Heroku によって公開されたスタックを使用するように Kf を変更するには、kf 名前空間の config-defaults ConfigMap を編集します。次のようなエントリを spaceStacksV3 キーに追加します。
kubectl edit kfsystem kfsystemspaceStacksV3: | - 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 stacksGetting 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 を使用したビルダーの操作ドキュメントに従って、独自のビルダー イメージを作成できます。作成したら、Container Registry に push して、config-defaults ConfigMap に追加します。
デフォルト スタックの設定
マニフェストで指定されていない場合、アプリにはデフォルト スタックが割り当てられます。デフォルト スタックは、V2 または V3 スタックリストの先頭にあるものです。オーバーライドされない限り、Cloud Foundry との互換性のために V2 スタックが選択されます。
kf 名前空間の config-defaults ConfigMap の spaceDefaultToV3Stack フィールドを "true" に設定することで、V2 ではなく V3 スタックの使用を Kf に強制できます。
kubectl edit configmap config-defaults -n kfspaceDefaultToV3Stack: "true"
このオプションは、spec.buildConfig.defaultToV3Stack フィールドを true または false に変更することで、スペースごとに変更できます。設定しない場合は、config-defaults ConfigMap の値が使用されます。
spaceDefaultToV3Stack の config-defaults 値 | 
スペースの spec.buildConfig.defaultToV3Stack | 
デフォルトのスタック | 
|---|---|---|
| 未設定 | 未設定 | V2 | 
"false" | 
未設定 | V2 | 
"true" | 
未設定 | V3 | 
| 任意 | false | 
V2 | 
| 任意 | true | 
V3 |