--- title: Cloud Native Buildpacks Tutorial - 9. kpackを使ってKubernetes上でCloud Native Builpacksを実行 tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "kpack", "Series"] categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "kpack"] date: 2020-04-29T13:10:12Z updated: 2020-04-29T14:26:10Z --- ここまでCloud Native Buildpacks(CNB)をLaptop上で使う`pack`を使用してきましたが、 今回はCNBをKubernetes上で実行する[kpack](https://github.com/pivotal/kpack)を使います。 [kpack v0.0.8](https://github.com/pivotal/kpack/releases/tag/v0.0.8)を使用します。 **目次** ### Kubernetesの確認 ここでは[Docker for Mac](https://docs.docker.com/docker-for-mac/#kubernetes)を使用しますが、他のKubernetesでも同じようにデプロイできます。 ``` $ kubectl cluster-info Kubernetes master is running at https://kubernetes.docker.internal:6443 KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy ``` ### kpackのインストール 次のコマンドでkpackをインストールします。 ``` kubectl apply -f https://github.com/pivotal/kpack/releases/download/v0.0.8/release-0.0.8.yaml ``` 次の二つのPodのstatusが`Running`になればOKです。 ``` $ kubectl get pods -n kpack NAME READY STATUS RESTARTS AGE kpack-controller-64d966c5f9-kgznt 1/1 Running 0 23s kpack-webhook-6b7799dc47-kbd4h 1/1 Running 0 22s ``` 次のCustom Resource Definitionが追加されます。 ``` $ kubectl get crd | grep pivotal builders.build.pivotal.io 2020-04-29T11:42:13Z builds.build.pivotal.io 2020-04-29T11:42:13Z clusterbuilders.build.pivotal.io 2020-04-29T11:42:13Z custombuilders.experimental.kpack.pivotal.io 2020-04-29T11:42:13Z customclusterbuilders.experimental.kpack.pivotal.io 2020-04-29T11:42:13Z images.build.pivotal.io 2020-04-29T11:42:13Z sourceresolvers.build.pivotal.io 2020-04-29T11:42:13Z stacks.experimental.kpack.pivotal.io 2020-04-29T11:42:13Z stores.experimental.kpack.pivotal.io 2020-04-29T11:42:13Z ``` ### sternのインストール 後にビルドログを参照するのに`stern`コマンドを使います。 ``` brew install stern ``` ### Builderの登録 kpackではクラスタ単位とnamespace単位でBuilderを設定できます。 前者を定義するリソースが[`ClusterBuilder`](https://github.com/pivotal/kpack/blob/master/docs/builders.md#clusterbuilder)で、後者が[`Builder`](https://github.com/pivotal/kpack/blob/master/docs/builders.md#builders-1)です。 ここでは`gcr.io/paketo-buildpacks/builder:base`を`ClusterBuilder`として登録します。 次のコマンドで`ClusterBuilder`を作成してください。 ```yaml cat < cluster-builder.yml apiVersion: build.pivotal.io/v1alpha1 kind: ClusterBuilder metadata: name: default spec: image: gcr.io/paketo-buildpacks/builder:base EOF kubectl apply -f cluster-builder.yml ``` `kubectl describe clusterbuilder `の`Status`で作成した`ClusterBuilder`が持つBuildpackとStackを確認できます。 ``` $ kubectl describe clusterbuilder default Name: default Namespace: Labels: Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"build.pivotal.io/v1alpha1","kind":"ClusterBuilder","metadata":{"annotations":{},"name":"default"},"spec":{"image":"gcr.io/p... API Version: build.pivotal.io/v1alpha1 Kind: ClusterBuilder Metadata: Creation Timestamp: 2020-04-29T11:48:19Z Generation: 1 Resource Version: 494300 Self Link: /apis/build.pivotal.io/v1alpha1/clusterbuilders/default UID: 11da1688-ab3e-4b77-b93e-1873a560ed48 Spec: Image: gcr.io/paketo-buildpacks/builder:base Update Policy: polling Status: Builder Metadata: Id: paketo-buildpacks/nodejs Version: v0.0.1 Id: paketo-buildpacks/dotnet-core Version: v0.0.1 Id: paketo-buildpacks/go Version: v0.0.1 Id: paketo-buildpacks/node-engine Version: 0.0.178 Id: paketo-buildpacks/npm Version: 0.1.11 Id: paketo-buildpacks/yarn-install Version: 0.1.19 Id: paketo-buildpacks/dotnet-core-conf Version: 0.0.122 Id: paketo-buildpacks/dotnet-core-runtime Version: 0.0.135 Id: paketo-buildpacks/dotnet-core-sdk Version: 0.0.133 Id: paketo-buildpacks/icu Version: 0.0.52 Id: paketo-buildpacks/node-engine Version: 0.0.178 Id: paketo-buildpacks/dotnet-core-aspnet Version: 0.0.128 Id: paketo-buildpacks/dotnet-core-build Version: 0.0.70 Id: paketo-buildpacks/dep Version: 0.0.109 Id: paketo-buildpacks/go-compiler Version: 0.0.112 Id: paketo-buildpacks/go-mod Version: 0.0.96 Id: paketo-buildpacks/azure-application-insights Version: 1.1.1 Id: paketo-buildpacks/build-system Version: 1.2.0 Id: paketo-buildpacks/dist-zip Version: 1.2.1 Id: paketo-buildpacks/spring-boot Version: 1.5.1 Id: paketo-buildpacks/executable-jar Version: 1.2.1 Id: paketo-buildpacks/jmx Version: 1.1.1 Id: paketo-buildpacks/bellsoft-liberica Version: 2.3.1 Id: paketo-buildpacks/apache-tomcat Version: 1.1.1 Id: paketo-buildpacks/encrypt-at-rest Version: 1.2.1 Id: paketo-buildpacks/debug Version: 1.2.1 Id: paketo-buildpacks/google-stackdriver Version: 1.1.1 Id: paketo-buildpacks/procfile Version: 1.3.1 Conditions: Last Transition Time: 2020-04-29T11:48:21Z Status: True Type: Ready Latest Image: gcr.io/paketo-buildpacks/builder@sha256:b1f509937af906cd8a14d5563356dd997c09148a381cbfef9896cb06aa51959e Observed Generation: 1 Stack: Id: io.buildpacks.stacks.bionic Run Image: gcr.io/paketo-buildpacks/run@sha256:fd87df6a892262c952559a164b8e2ad1be7655021ad50d520085a19a082cd379 Events: ``` ### Docker Registryの登録 次のコマンドでkpackがbuildした後にpushするDocker Registryを登録します。 ```yaml export DOCKERHUB_USERNAME=**** export DOCKERHUB_PASSWORD=**** cat < secret.yml apiVersion: v1 kind: Secret metadata: name: tutorial-registry-credentials annotations: build.pivotal.io/docker: https://index.docker.io/v1/ type: kubernetes.io/basic-auth stringData: username: ${DOCKERHUB_USERNAME} password: ${DOCKERHUB_PASSWORD} EOF kubectl apply -f secret.yml ``` 次のコマンドで、上記で作成した`Secret`を参照する`ServiceAccount`を作成します。 ```yaml cat < service-account.yml apiVersion: v1 kind: ServiceAccount metadata: name: tutorial-service-account secrets: - name: tutorial-registry-credentials EOF kubectl apply -f service-account.yml ``` ### Imageのビルド kpackではbuildするのOCIイメージを[`Image`](https://github.com/pivotal/kpack/blob/master/docs/image.md)リソースとして管理します。 ビルドするアプリとして[https://github.com/making/hello-golang](https://github.com/making/hello-golang)を使用します。 次のコマンドで`Image`を作成してください。 ```yaml cat < hello-golang.yml apiVersion: build.pivotal.io/v1alpha1 kind: Image metadata: name: hello-golang spec: tag: ${DOCKERHUB_USERNAME}/hello-golang serviceAccount: tutorial-service-account cacheSize: "1.5Gi" builder: name: default kind: ClusterBuilder source: git: url: https://github.com/making/hello-golang revision: 85071eb4aa95f20cc18555aca5e31e2aad874e46 # あえて明示する EOF kubectl apply -f hello-golang.yml ``` `kubectl get image`を実行してください。 ``` $ kubectl get image NAME LATESTIMAGE READY hello-golang Unknown ``` `Image`作成直後はビルド中で`READY`が`Unknown`と表示されます。 別のTerminalで`stern 'hello-golang*'`を実行してください。次のようなログが出力されます。 ``` + hello-golang-build-1-sjdv8-build-pod › prepare hello-golang-build-1-sjdv8-build-pod prepare prepare:fetch.go:88: Successfully cloned "https://github.com/making/hello-golang" @ "85071eb4aa95f20cc18555aca5e31e2aad874e46" in path "/workspace" + hello-golang-build-1-sjdv8-build-pod › analyze hello-golang-build-1-sjdv8-build-pod analyze Previous image with name "making/hello-golang" not found + hello-golang-build-1-sjdv8-build-pod › build hello-golang-build-1-sjdv8-build-pod build hello-golang-build-1-sjdv8-build-pod build Go Compiler Buildpack 0.0.112 hello-golang-build-1-sjdv8-build-pod build Go 1.13.9: Contributing to layer hello-golang-build-1-sjdv8-build-pod build Downloading from https://buildpacks.cloudfoundry.org/dependencies/go/go-1.13.9-bionic-61a279e8.tgz hello-golang-build-1-sjdv8-build-pod build Verifying checksum hello-golang-build-1-sjdv8-build-pod build Expanding to /layers/paketo-buildpacks_go-compiler/go hello-golang-build-1-sjdv8-build-pod build hello-golang-build-1-sjdv8-build-pod build Go Mod Buildpack 0.0.96 hello-golang-build-1-sjdv8-build-pod build Setting environment variables hello-golang-build-1-sjdv8-build-pod build : Contributing to layer hello-golang-build-1-sjdv8-build-pod build github.com/making/hello-golang hello-golang-build-1-sjdv8-build-pod build : Contributing to layer hello-golang-build-1-sjdv8-build-pod build Running `go install` hello-golang-build-1-sjdv8-build-pod build : Contributing to layer hello-golang-build-1-sjdv8-build-pod build Contributing start command hello-golang-build-1-sjdv8-build-pod build Process types: hello-golang-build-1-sjdv8-build-pod build web: /layers/paketo-buildpacks_go-mod/app-binary/bin/hello-golang + hello-golang-build-1-sjdv8-build-pod › export hello-golang-build-1-sjdv8-build-pod export Adding layer 'launcher' hello-golang-build-1-sjdv8-build-pod export Adding layer 'paketo-buildpacks/go-mod:app-binary' hello-golang-build-1-sjdv8-build-pod export Adding 1/1 app layer(s) hello-golang-build-1-sjdv8-build-pod export Adding layer 'config' hello-golang-build-1-sjdv8-build-pod export *** Images (sha256:b02bb6a26595f348db51e508d641da8f8759236d4adbf85b980dceddb9544aa3): hello-golang-build-1-sjdv8-build-pod export making/hello-golang hello-golang-build-1-sjdv8-build-pod export index.docker.io/making/hello-golang:b1.20200429.121519 hello-golang-build-1-sjdv8-build-pod export Adding cache layer 'paketo-buildpacks/go-compiler:61a279e80c8d3a03ae9464dc2fc263e37e0655d45e9931693ea9522bfbb91847' hello-golang-build-1-sjdv8-build-pod export Adding cache layer 'paketo-buildpacks/go-compiler:go' hello-golang-build-1-sjdv8-build-pod export Adding cache layer 'paketo-buildpacks/go-mod:go-cache' hello-golang-build-1-sjdv8-build-pod export Adding cache layer 'paketo-buildpacks/go-mod:go-mod' ``` ビルドが完了した後に再度`kubectl get image`を実行してください。 ``` $ kubectl get image NAME LATESTIMAGE READY hello-golang index.docker.io/making/hello-golang@sha256:b02bb6a26595f348db51e508d641da8f8759236d4adbf85b980dceddb9544aa3 True ``` 作成されたイメージ名が表示されます。 このイメージを`docker run`で起動しましょう。 ``` docker run --rm -p 8080:8080 $(kubectl get image hello-golang -o jsonpath='{.status.latestImage}') ``` アプリケーションにアクセスします。 ``` $ curl localhost:8080 -w '\n' Hello World! ``` ### Imageの再ビルド `Image`は`git.revision`に指定したブランチのソースコードが変更したら自動で再ビルドされます。 ここでは`hello-golang.yml`の`git.revision`を変更して、ソースコードの変更をシュミレートします。 次のコマンドを実行してください。 ```yaml cat < hello-golang.yml apiVersion: build.pivotal.io/v1alpha1 kind: Image metadata: name: hello-golang spec: tag: ${DOCKERHUB_USERNAME}/hello-golang serviceAccount: tutorial-service-account cacheSize: "1.5Gi" builder: name: default kind: ClusterBuilder source: git: url: https://github.com/making/hello-golang revision: 4bae4fb358ba5235ec8c8d9c001821a2017c70cb # 変更 EOF kubectl apply -f hello-golang.yml ``` `stern 'hello-golang*'`を実行しているターミナルで、次のようなログが流れます。 ``` + hello-golang-build-2-bvzws-build-pod › prepare hello-golang-build-2-bvzws-build-pod prepare prepare:fetch.go:88: Successfully cloned "https://github.com/making/hello-golang" @ "4bae4fb358ba5235ec8c8d9c001821a2017c70cb" in path "/workspace" + hello-golang-build-2-bvzws-build-pod › analyze hello-golang-build-2-bvzws-build-pod analyze Restoring metadata for "paketo-buildpacks/go-compiler:61a279e80c8d3a03ae9464dc2fc263e37e0655d45e9931693ea9522bfbb91847" from cache hello-golang-build-2-bvzws-build-pod analyze Restoring metadata for "paketo-buildpacks/go-compiler:go" from cache hello-golang-build-2-bvzws-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:app-binary" from app image hello-golang-build-2-bvzws-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:go-cache" from cache hello-golang-build-2-bvzws-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:go-mod" from cache + hello-golang-build-2-bvzws-build-pod › build hello-golang-build-2-bvzws-build-pod build hello-golang-build-2-bvzws-build-pod build Go Compiler Buildpack 0.0.112 hello-golang-build-2-bvzws-build-pod build Go 1.13.9: Reusing cached layer hello-golang-build-2-bvzws-build-pod build hello-golang-build-2-bvzws-build-pod build Go Mod Buildpack 0.0.96 hello-golang-build-2-bvzws-build-pod build Setting environment variables hello-golang-build-2-bvzws-build-pod build : Contributing to layer hello-golang-build-2-bvzws-build-pod build github.com/making/hello-golang hello-golang-build-2-bvzws-build-pod build : Contributing to layer hello-golang-build-2-bvzws-build-pod build Running `go install` hello-golang-build-2-bvzws-build-pod build : Contributing to layer hello-golang-build-2-bvzws-build-pod build Contributing start command hello-golang-build-2-bvzws-build-pod build Process types: hello-golang-build-2-bvzws-build-pod build web: /layers/paketo-buildpacks_go-mod/app-binary/bin/hello-golang + hello-golang-build-2-bvzws-build-pod › export hello-golang-build-2-bvzws-build-pod export Reusing layers from image 'index.docker.io/making/hello-golang@sha256:b02bb6a26595f348db51e508d641da8f8759236d4adbf85b980dceddb9544aa3' hello-golang-build-2-bvzws-build-pod export Reusing layer 'launcher' hello-golang-build-2-bvzws-build-pod export Adding layer 'paketo-buildpacks/go-mod:app-binary' hello-golang-build-2-bvzws-build-pod export Reusing 1/1 app layer(s) hello-golang-build-2-bvzws-build-pod export Reusing layer 'config' hello-golang-build-2-bvzws-build-pod export *** Images (sha256:d0c38c6cd120c33750dcf7cf9c302df683d23d73b64ec721c2d9e56da83a9632): hello-golang-build-2-bvzws-build-pod export making/hello-golang hello-golang-build-2-bvzws-build-pod export index.docker.io/making/hello-golang:b2.20200429.122941 hello-golang-build-2-bvzws-build-pod export Reusing cache layer 'paketo-buildpacks/go-compiler:61a279e80c8d3a03ae9464dc2fc263e37e0655d45e9931693ea9522bfbb91847' hello-golang-build-2-bvzws-build-pod export Reusing cache layer 'paketo-buildpacks/go-compiler:go' hello-golang-build-2-bvzws-build-pod export Adding cache layer 'paketo-buildpacks/go-mod:go-cache' hello-golang-build-2-bvzws-build-pod export Reusing cache layer 'paketo-buildpacks/go-mod:go-mod' ``` ビルドが完了したら再度`docker run`で起動しましょう。 ``` docker run --rm -p 8080:8080 $(kubectl get image hello-golang -o jsonpath='{.status.latestImage}') ``` アプリケーションにアクセスします。 ``` $ curl localhost:8080 -w '\n' Hello Cloud Native Buildpacks! ``` アプリが更新されました。 `hello-golan` `Image`のビルド履歴は次のコマンドで確認できます。 ``` $ kubectl get build -l image.build.pivotal.io/image=hello-golang NAME IMAGE SUCCEEDED hello-golang-build-1-sjdv8 index.docker.io/making/hello-golang@sha256:b02bb6a26595f348db51e508d641da8f8759236d4adbf85b980dceddb9544aa3 True hello-golang-build-2-bvzws index.docker.io/making/hello-golang@sha256:d0c38c6cd120c33750dcf7cf9c302df683d23d73b64ec721c2d9e56da83a9632 True Unknown ``` Docker Hubでビルド毎のTagが作られていることも確認できます。 ![image](https://user-images.githubusercontent.com/106908/80596156-e0b9fc00-8a60-11ea-9f26-4adb09512cb4.png) ### Builderの更新 再ビルドはBuilder(ここでは`gcr.io/paketo-buildpacks/build:base`)が更新された場合も行われます。 ここでは`ClusterBuilder`の`image`を変更し、Builderの更新をシュミレートしてみます。 `ClusterBuilder`を更新する前に現状のイメージを`pack inspect-image`コマンドで確認します。 ``` $ pack inspect-image $(kubectl get image hello-golang -o jsonpath='{.status.latestImage}') Inspecting image: index.docker.io/making/hello-golang@sha256:d0c38c6cd120c33750dcf7cf9c302df683d23d73b64ec721c2d9e56da83a9632 REMOTE: Stack: io.buildpacks.stacks.bionic Base Image: Reference: gcr.io/paketo-buildpacks/run@sha256:fd87df6a892262c952559a164b8e2ad1be7655021ad50d520085a19a082cd379 Top Layer: sha256:f0d87426c0a82340475d73a9108b063d3d3cfbd92ef3b4af74dcd8f904475a36 Run Images: gcr.io/paketo-buildpacks/run:base-cnb Buildpacks: ID VERSION paketo-buildpacks/go-compiler 0.0.112 paketo-buildpacks/go-mod 0.0.96 Processes: TYPE SHELL COMMAND ARGS web (default) bash /layers/paketo-buildpacks_go-mod/app-binary/bin/hello-golang ... ``` 次のコマンドで`ClusterBuilder`を変更してください。 ```yaml cat < cluster-builder.yml apiVersion: build.pivotal.io/v1alpha1 kind: ClusterBuilder metadata: name: default spec: image: gcr.io/paketo-buildpacks/builder:tiny EOF kubectl apply -f cluster-builder.yml ``` `stern 'hello-golang*'`を実行しているターミナルで、次のようなログが流れます。 ``` + hello-golang-build-3-hl5k2-build-pod › prepare hello-golang-build-3-hl5k2-build-pod prepare prepare:fetch.go:88: Successfully cloned "https://github.com/making/hello-golang" @ "4bae4fb358ba5235ec8c8d9c001821a2017c70cb" in path "/workspace" + hello-golang-build-3-hl5k2-build-pod › analyze hello-golang-build-3-hl5k2-build-pod analyze Restoring metadata for "paketo-buildpacks/go-compiler:61a279e80c8d3a03ae9464dc2fc263e37e0655d45e9931693ea9522bfbb91847" from cache hello-golang-build-3-hl5k2-build-pod analyze Restoring metadata for "paketo-buildpacks/go-compiler:go" from cache hello-golang-build-3-hl5k2-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:app-binary" from app image hello-golang-build-3-hl5k2-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:go-mod" from cache hello-golang-build-3-hl5k2-build-pod analyze Restoring metadata for "paketo-buildpacks/go-mod:go-cache" from cache + hello-golang-build-3-hl5k2-build-pod › build hello-golang-build-3-hl5k2-build-pod build hello-golang-build-3-hl5k2-build-pod build Go Compiler Buildpack 0.0.112 hello-golang-build-3-hl5k2-build-pod build Go 1.13.9: Contributing to layer hello-golang-build-3-hl5k2-build-pod build Downloading from https://buildpacks.cloudfoundry.org/dependencies/go/go-1.13.9-tiny-aa89f235.tgz hello-golang-build-3-hl5k2-build-pod build Verifying checksum hello-golang-build-3-hl5k2-build-pod build Expanding to /layers/paketo-buildpacks_go-compiler/go hello-golang-build-3-hl5k2-build-pod build Removing unused layers hello-golang-build-3-hl5k2-build-pod build 61a279e80c8d3a03ae9464dc2fc263e37e0655d45e9931693ea9522bfbb91847 hello-golang-build-3-hl5k2-build-pod build hello-golang-build-3-hl5k2-build-pod build Go Mod Buildpack 0.0.96 hello-golang-build-3-hl5k2-build-pod build Setting environment variables hello-golang-build-3-hl5k2-build-pod build : Contributing to layer hello-golang-build-3-hl5k2-build-pod build github.com/making/hello-golang hello-golang-build-3-hl5k2-build-pod build : Contributing to layer hello-golang-build-3-hl5k2-build-pod build Running `go install` hello-golang-build-3-hl5k2-build-pod build : Contributing to layer hello-golang-build-3-hl5k2-build-pod build Contributing start command hello-golang-build-3-hl5k2-build-pod build Process types: hello-golang-build-3-hl5k2-build-pod build web: /layers/paketo-buildpacks_go-mod/app-binary/bin/hello-golang + hello-golang-build-3-hl5k2-build-pod › export hello-golang-build-3-hl5k2-build-pod export Reusing layers from image 'index.docker.io/making/hello-golang@sha256:d0c38c6cd120c33750dcf7cf9c302df683d23d73b64ec721c2d9e56da83a9632' hello-golang-build-3-hl5k2-build-pod export Reusing layer 'launcher' hello-golang-build-3-hl5k2-build-pod export Reusing layer 'paketo-buildpacks/go-mod:app-binary' hello-golang-build-3-hl5k2-build-pod export Reusing 1/1 app layer(s) hello-golang-build-3-hl5k2-build-pod export Adding layer 'config' hello-golang-build-3-hl5k2-build-pod export *** Images (sha256:21d0614008f77dc1c0adc971ce92be0fa6971aefb8ea13f83a320a91ce1f5b7e): hello-golang-build-3-hl5k2-build-pod export making/hello-golang hello-golang-build-3-hl5k2-build-pod export index.docker.io/making/hello-golang:b3.20200429.124156 hello-golang-build-3-hl5k2-build-pod export Adding cache layer 'paketo-buildpacks/go-compiler:aa89f23581019633b2076cc4bd27c441010e03a7dceae992724a9ecadb6cd983' hello-golang-build-3-hl5k2-build-pod export Reusing cache layer 'paketo-buildpacks/go-compiler:go' hello-golang-build-3-hl5k2-build-pod export Adding cache layer 'paketo-buildpacks/go-mod:go-cache' hello-golang-build-3-hl5k2-build-pod export Reusing cache layer 'paketo-buildpacks/go-mod:go-mod' ``` ビルドが完了したら最新のイメージを`pack inspect-image`コマンドで確認します。 ``` $ pack inspect-image $(kubectl get image hello-golang -o jsonpath='{.status.latestImage}') Inspecting image: index.docker.io/making/hello-golang@sha256:21d0614008f77dc1c0adc971ce92be0fa6971aefb8ea13f83a320a91ce1f5b7e REMOTE: Stack: org.cloudfoundry.stacks.tiny Base Image: Reference: gcr.io/paketo-buildpacks/run@sha256:29437a6e82ec21079ba2fa37476eb27ad724a1c39eeb72239e8400a064f76892 Top Layer: sha256:6c5f893465b49acad51786da441a519914c0388ccf92d1c0a8265b629216b830 Run Images: gcr.io/paketo-buildpacks/run:tiny-cnb Buildpacks: ID VERSION paketo-buildpacks/go-compiler 0.0.112 paketo-buildpacks/go-mod 0.0.96 Processes: TYPE SHELL COMMAND ARGS web (default) /layers/paketo-buildpacks_go-mod/app-binary/bin/hello-golang ... ``` Stackが変わったことが確認できます。 ![image](https://user-images.githubusercontent.com/106908/80597545-f6c8bc00-8a62-11ea-96f5-cc6c7f103628.png) ベースイメージが`gcr.io/paketo-buildpacks/builder:base`から`gcr.io/paketo-buildpacks/builder:tiny`に変わったので、イメージサイズが小さくなっていることも確認できます。 ### kpackのアンインストール 作成したリソースを削除します。 ``` kubectl delete -f hello-golang.yml -f service-account.yml -f secret.yml -f cluster-builder.yml ``` kpackをアンインストールします。 ``` kubectl delete -f https://github.com/pivotal/kpack/releases/download/v0.0.8/release-0.0.8.yaml ```