Kf は Buildpack を使用して、アプリケーションのソースコードを実行可能なイメージに変換します。Cloud Native Buildpack は最新の Buildpack API v3 を使用します。企業は、既存の 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 とスタックのプロパティの変更は、kfsystem
カスタム リソースで行う必要があります。Kf オペレーターは、kfsystem
に設定された値に基づいて 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 を変更するには、kfsystem
カスタム リソースを編集します。これにより、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
を使用したビルダーの操作ドキュメントに従って作成できます。作成したら、Container Registry に push して、kfsystem
カスタム リソースに追加します。
デフォルトのスタックを設定する
マニフェストで指定されていない場合、アプリにはデフォルト スタックが割り当てられます。デフォルト スタックは、V2 または V3 スタックリストの先頭にあるものです。オーバーライドされない限り、Cloud Foundry との互換性のために V2 スタックが選択されます。
kfsystem
カスタム リソースの spaceDefaultToV3Stack
フィールドを "true"
に設定することで、V2 ではなく V3 スタックの使用を Kf に強制できます(kfsystem
は config-defaults
ConfigMap の対応する spaceDefaultToV3Stack
フィールドを自動更新します)。
kubectl edit kfsystem kfsystem
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 |