Buildpack はソースコードを実行可能ファイルに変換します。これにより、信頼性の高いシンプルな方法でコンテナを繰り返し作成できます。Kf は V2 と V3 の Buildpack の両方をサポートしているため、この 2 つの違いを理解しておくことが重要です。
V2 Buildpack
ほとんどの Cloud Foundry アプリケーションでは V2 Buildpack が使用されています。Kf で V2 Buildpack を使用している場合、ライフサイクル バイナリと Buildpack が git URL からダウンロードされて構成されます。Kf は lifecycle
CLI を使用して、ソースコードに各 Buildpack を実行します。
長所
- パイプラインやコードを変更せずに、すぐに使用できる。
短所
- V3 に置き換えられた従来の Buildpack。
- パフォーマンスと信頼性が低い。Kf ビルド パイプラインでは、V2 Buildpack 用により多くの I/O が必要になります。
- コミュニティ リソースが少ない。
- Kf では OSS Git リポジトリのみがサポートされています。
V3 Buildpack
V3 Buildpack は Cloud Native Computing Foundation(CNCF)のプロジェクトで、仕様、CLI(pack)が明確に定義されています。また、さまざまな言語とフレームワークでイノベーションを推進するコミュニティが存在し、拡大しています。Google Cloud にも独自の Google Cloud の Buildpack が用意されています。
V3 Buildpack には、OCI コンテナが 2 つあります。
- ビルダー イメージ
- 実行イメージ
ビルダー イメージ
ビルダー イメージは、ソースコードを実行可能なコンテナにビルドする場合に使用します。イメージには、ソースコードのコンパイルに必要な detect
スクリプトとその他のユーティリティが含まれています。
実行イメージ
実行イメージは、コンテナをビルドするベースイメージです。これは、アプリの実行時に使用されるベースイメージになります。
レイヤ
V3 Buildpack は、レイヤを使用して最終的なコンテナを作成します。ビルドに含まれる各 Buildpack でアプリのファイル システムと環境変数を操作できます。このレイヤ化のアプローチにより、Buildpack は細分化され、より汎用的なものとなっています。
V3 Buildpack は、OCI コンテナをベースにビルドされています。このため、Kf ビルド パイプラインからアクセスできる Container Registry に V3 ビルダー イメージを保存する必要があります。ビルド パイプラインは、ビルダー イメージを使用して基盤となるスクリプトを適用し、ソースコードを実行可能なコンテナにビルドします。
長所
- Google がサポートするビルダーと実行イメージ。
- Cloud Build などのさまざまな Google Cloud プロダクトと連携します。
- 拡大するコミュニティと Buildpack レジストリ。
短所
- コードやプロセスの更新が必要になる場合がある。たとえば、Java Buildpack にはソースコードが必要ですが、V2 Buildpack には jar ファイルが必要です。
- V3 Buildpack は新しいため、追加の検証が必要になることがある(コミュニティで開発された Buildpack を使用)。
Kf スタック
スタックを表示する
アプリを push すると、ビルド パイプラインは、選択したスタック(--stack
フラグまたはマニフェストで指定)に基づいて Buildpack を決定します。
スペースで使用可能なスタックを確認するには、まず、スペースがターゲットに設定されていることを確認します。
kf target -s myspace
設定されていれば、kf stacks
サブコマンドでスタックを一覧表示できます。
kf stacks
出力には、V2 と V3 の両方のスタックが表示されます。
Getting stacks in Space: myspace
Version Name Build Image Run Image
V2 cflinuxfs3 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3 kf-v2-to-v3-shim gcr.io/kf-releases/v2-to-v3:v2.7.0 gcr.io/buildpacks/gcp/run:v1 This is a stack added by the integration tests to assert that v2->v3 shim works
V3 google gcr.io/buildpacks/builder:v1 gcr.io/buildpacks/gcp/run:v1 Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
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 Buildpack に 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
この新しいスタックを push できるようになりました。
kf push myapp --stack google
次の例では、Ruby V2 Buildpack を構成し、ビルド パイプラインのデフォルトを 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
V2 から V3 への Buildpack の移行
Kf には、標準の V2 Buildpack でビルドされたアプリケーションをビルドできるように V3 スタックが用意されています。このビルドでは、kf-v2-to-v3-shim
という名前のスタックが使用されます。kf-v2-to-v3-shim
スタックは、標準の V3 Buildpacks API に従って作成されます。Google が維持するビルダー イメージは、標準の Buildpack プロセスに従い、Kf の各リリースを使用して作成されます。ビルダー イメージは、kf wrap-v2-buildpack
コマンドと同じプロセスで作成された V3 Buildpack のリストを集約します。V3 Buildpack イメージは、標準の V2 Buildpack イメージを使用して作成されます。ただし、V3 Buildpack には、参照される V2 Buildpack のバイナリが含まれていません。代わりに、V2 Buildpack イメージが参照され、バイナリは(kf push
を実行して)アプリのビルド時にダウンロードされます。
V2 Buildpack は、アプリのビルド時に、対応する git リポジトリからダウンロードされます。V3 の検出が動作すると、ダウンロードした V2 検出スクリプトに実行が移ります。検出に成功した最初の Buildpack グループはビルドステップに進み、ダウンロードした V2 ビルダー スクリプトに実行が移ります。
kf-v2-to-v3-shim
スタックでは、次に挙げる V2 Buildpack がサポートされています。
Buildpack | Git リポジトリ |
---|---|
java_buildpack | https://github.com/cloudfoundry/java-buildpack |
dotnet_core_buildpack | https://github.com/cloudfoundry/dotnet-core-buildpack |
nodejs_buildpack | https://github.com/cloudfoundry/nodejs-buildpack |
go_buildpack | https://github.com/cloudfoundry/go-buildpack |
python_buildpack | https://github.com/cloudfoundry/python-buildpack |
binary_buildpack | https://github.com/cloudfoundry/binary-buildpack |
nginx_buildpack | https://github.com/cloudfoundry/nginx-buildpack |
オプション 1: 標準の V2 Buildpack を使用してビルドされたアプリを移行する
kf-v2-to-v3-shim
スタックを使用してアプリをビルドするには、次のコマンドを使用します。
kf push myapp --stack kf-v2-to-v3-shim
kf-v2-to-v3-shim
スタックは、ラップされた V2 Buildpack を使用してランタイムを自動的に検出します。結果として生成されるアプリイメージは、V3 標準ビルドとビルド パイプラインを使用して作成されますが、これは同等の V2 Buildpack のビルダーとなります。
オプション 2: カスタム V2 Buildpack を使用してビルドされたアプリを移行する
Kf には Buildpack 移行ツールが用意されています。このツールを使用すると、V2 Buildpack を V3 Buildpack でラップできます。ラップされた Buildpack は、V3 Buildpack が利用可能な場所であればどこでも使用できます。
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
unzip
Cloud Shell エディタで、各サブコマンドが正しいパスで利用可能であり、正しいバージョンであることを確認することをおすすめします。
既知の問題
次の機能は Kf でまだ使用できません。この中に組織で優先度が高いものがある場合は、営業担当者にお問い合わせください。
- V3 ビルダー イメージの非公開コンテナ レジストリ。
- V3 キャッシュ。
- git 認証情報が必要な V2 Buildpack。