スタックと Buildpack をカスタマイズする

Kf は Buildpack を使用して、アプリケーションのソースコードを実行可能なイメージに変換します。Cloud Native Buildpack は最新の Buildpack API v3 を使用します。企業は、既存の Buildpack に v3 のサポートを積極的に追加しています。

Kf は、Buildpack API 仕様の V2V3 の両方に準拠する 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 を使用して独自のビルダー イメージを作成します。独自のビルダー イメージは、packcreate-builder を使用したビルダーの操作ドキュメントに従って作成できます。作成したら、Container Registry に push して、kfsystem カスタム リソースに追加します。

デフォルトのスタックを設定する

マニフェストで指定されていない場合、アプリにはデフォルト スタックが割り当てられます。デフォルト スタックは、V2 または V3 スタックリストの先頭にあるものです。オーバーライドされない限り、Cloud Foundry との互換性のために V2 スタックが選択されます。

kfsystem カスタム リソースの spaceDefaultToV3Stack フィールドを "true" に設定することで、V2 ではなく V3 スタックの使用を Kf に強制できます(kfsystemconfig-defaults ConfigMap の対応する spaceDefaultToV3Stack フィールドを自動更新します)。

kubectl edit kfsystem kfsystem
spaceDefaultToV3Stack: "true"

このオプションは、spec.buildConfig.defaultToV3Stack フィールドを true または false に変更することで、スペースごとに変更できます。設定しない場合は、config-defaults ConfigMap の値が使用されます。

spaceDefaultToV3Stackconfig-defaults スペースの spec.buildConfig.defaultToV3Stack デフォルトのスタック
未設定 未設定 V2
"false" 未設定 V2
"true" 未設定 V3
任意 false V2
任意 true V3

次のステップ