V2 と V3 の Buildpack を比較する

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 ビルダー イメージを保存する必要があります。ビルド パイプラインは、ビルダー イメージを使用して基盤となるスクリプトを適用し、ソースコードを実行可能なコンテナにビルドします。

長所

短所

  • コードやプロセスの更新が必要になる場合がある。たとえば、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。