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 Description
V2 cflinuxfs3 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
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
移行
注: この機能は現在試験運用版であり、変更される可能性があります。
Kf には、V2 Buildpack をラップできる移行ツールがあります。その結果、V3 ビルダー内で使用できる 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
Cloud Shell エディタで、各サブコマンドが正しいパスで利用可能であり、正しいバージョンであることを確認することをおすすめします。
既知の問題
次の機能は Kf でまだ使用できません。この中に組織で優先度が高いものがある場合は、営業担当者にお問い合わせください。
- V3 ビルダー イメージの非公開コンテナ レジストリ。
- V3 キャッシュ。
- git 認証情報が必要な V2 Buildpack。