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-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
セクションには、次の 3 つの項目があります。
- Buildpack V2 には、V2 互換の Buildpack のリストが実行順に表示されます。
- スタック V2 は、V2 Buildpack のビルドをトリガーするために選択できるスタックを示します。
- スタック 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 ビルドイメージには Buildpack が組み込まれているため、リストを取得するには 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 のカスタマイズ
デベロッパーがアクセスできる Buildpack をカスタマイズするには、デベロッパーがアクセスできる Buildpack のみを使用して独自のビルダー イメージを作成します。他の作成者が公開したビルダー イメージを使用することもできます。
サードパーティのビルダー イメージを使用する
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
Heroku によって公開されたスタックを使用するように Kf を変更するには、kf
名前空間の config-defaults
ConfigMap を編集します。次のようなエントリを spaceStacksV3
キーに追加します。
$ kubectl edit configmap config-defaults -n kf
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
を使用したビルダーの操作ドキュメントに従って、独自のビルダー イメージを作成できます。作成したら、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 kf
spaceDefaultToV3Stack: "true"
このオプションは、spec.buildConfig.defaultToV3Stack
フィールドを true
または false
に変更することで、スペースごとに変更できます。設定しない場合は、config-defaults
ConfigMap の値が使用されます。
spaceDefaultToV3Stack の config-defaults 値 |
スペースの spec.buildConfig.defaultToV3Stack |
デフォルトのスタック |
---|---|---|
未設定 | 未設定 | V2 |
"false" |
未設定 | V2 |
"true" |
未設定 | V3 |
任意 | false |
V2 |
任意 | true |
V3 |