SlideShare a Scribd company logo
1 of 15
Download to read offline
kpackによるコンテナイメージのビルド
VMware DevOps Meetup #6
2020/10/21
本日の内容
kpackを使ってKubernetes環境でコンテナイメージを作成する方法を紹介します
1. コンテナイメージのビルド方法
2. Cloud Native Buildpacks
3. kpack
4. デモ
● 参考
○ Dockerfileかきたくないでござる
○ Getting Started with VMware Tanzu Build Service 1.0
○ Tanzu Build Service を触ってみる
○ Buildpacksのビルダーをスクラッチから作ってみる
コンテナイメージのビルド方法
● ホスト上でコンテナイメージをビルド
○ docker : Dockerfileからコンテナイメージを作成
○ buildah : デーモンを利用せずに Dockerfileからコンテナイメージを作成
○ pack : Cloud Native Buildpacksを利用してコンテナイメージを作成
● Kubernetes上でコンテナイメージをビルド
○ kaniko : Kubernetes上でDockerfileからコンテナイメージを作成
○ Source-to-Image (S2I) : OpenShiftの機能でコンテナイメージを作成
○ kpack : Kubernetes上でCloud Native Buildpacksを利用してコンテナイメージを作成
● クラウドサービス
○ Google Cloud Build : Cloud Native Buildpacksに対応 (2020/10/10)
○ AWS CodeBuild
○ Azure Container Registry Tasks
Cloud Native Buildpacks(CNB) ?
● BuildpackはPaaSであるCloud FoundryやHerokuで利用されているアプリケー
ション実行環境を作成する仕組み。
○ ソースコードからアプリケーションのフレームワークを認識し、アプリケーションをビルドし、実行可能
なイメージ(Droplet/Slug)を作成する。
● Cloud Native BuildpacksはDockerやKubernetes等でBuildpackの仕組みを活用
してOCI準拠のコンテナイメージを作成する事を可能にする。
○ CNBはCNCFのSandboxプロジェクト。
○ CNBの実装
■ Paketo Buildpacks : Cloud Foundry Foundationのプロジェクト
■ Heroku Buildpacks : Heroku向けのBuildpack
■ Google Cloud Buildpacks : Google Cloudのコンテナプラットフォームに最適化
https://buildpacks.io/
CNBのコンポーネント
● Builder : ビルドに利用するコンテナイメージ。Buildpackとビルドに利用するBuild/Runイメー
ジ(Stack)で構成される。
● Buildpack : ソースコードの検出、アプリケーションのビルドや実行方法を定義
● Stack : Builderがイメージ作成時に利用する、ビルド用・実行用のイメージ
● Lifecycle : Buildpackの実行をオーケストレーションし、アプリケーションイメージを組み立て
る。
● Platform : OCIイメージを作成するために利用されるプラットフォーム(pack cli、kpack、
tekton等)
https://buildpacks.io/docs/concepts/components/
pack : Buildpack CLI
● Dockerとpackコマンドによりコンテナイメージを作
成
● Builderイメージを指定して、Dockerfileを利用せ
ずにアプリケーションソースコードから、アプリケー
ションを自動検出してコンテナイメージを作成
● ビルドしたコンテナイメージをレジストリにプッシュ
することも可能。(--publish)
● リベースによりベースイメージだけ変更することも
可能。(pack rebase)
# git clone https://github.com/buildpacks/samples
# cd samples
# ls apps/
aspnet bash-script batch-script java-maven kotlin-gradle README.md ruby-bundler
# ls java-maven/
mvnw mvnw.cmd pom.xml src
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# pack build -p apps/java-maven --builder cnbs/sample-builder:bionic sample-app
===> DETECTING
[detector] samples/java-maven 0.0.1
===> ANALYZING
===> RESTORING
===> BUILDING
[builder] ---> Java buildpack
[builder] ---> Installing JDK
===> EXPORTING
[exporter] Adding layer 'samples/java-maven:jdk'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'config'
[exporter] Adding layer 'process-types'
[exporter] Adding label 'io.buildpacks.lifecycle.metadata'
[exporter] Adding label 'io.buildpacks.build.metadata'
[exporter] Adding label 'io.buildpacks.project.metadata'
[exporter] Setting default process type 'web'
[exporter] *** Images (68472453e67b):
[exporter] sample-app
[exporter] Reusing cache layer 'samples/java-maven:jdk'
[exporter] Adding cache layer 'samples/java-maven:maven_m2'
Successfully built image sample-app
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cnbs/sample-stack-run bionic d57edd2cacb1 3 weeks ago 70.3MB
cnbs/sample-builder bionic a1fff020741a 40 years ago 180MB
sample-app latest 68472453e67b 40 years ago 300MB
buildpacksio/lifecycle 0.9.1 1a8d17b1a7a7 40 years ago 15.1MB
https://buildpacks.io/docs/app-journey/
base-1
Java
App
base-2
Java
App
rebase
kpack
● Kubernetes Native Container Build Service
● Kubernetesを拡張して、Kubernetes上でCNBを利用するための仕組み
○ コンテナイメージのビルドは Kubernetes上のPod内で行われる
○ builderやstack、作成されるimage等がKubernetesのCRD(Custom Resource Definition)として管
理される。
● VMware(旧Pivotal)が中心となって開発
○ Tanzu Build Service(TBS)はkpackをVMwareがサポートするもの (2020/8 GA v1.0.2)
○ TBSではStackやBuilder等が事前定義されていて、 kpack向けのCustom Resourceを直接操作せ
ずにkpコマンドを利用して簡単に利用可能
● Cloud Foundry for Kubernetes(cf-for-k8s)のコンポーネントとしても利用されてい
る。(cf pushされたソースコードからコンテナイメージをビルド)
https://github.com/pivotal/kpack
kpackのインストール
● kpack Tutorial : https://github.com/pivotal/kpack/blob/master/docs/tutorial.md
# kubectl get pods -n kpack
NAME READY STATUS RESTARTS AGE
kpack-controller-6f57d5f7d-zzrf7 1/1 Running 0 10m
kpack-webhook-5cf99c5cd7-tf87m 1/1 Running 0 10m
# kubectl get crd | grep kpack
builders.kpack.io 2020-10-14T05:54:54Z
builds.kpack.io 2020-10-14T05:54:54Z
clusterbuilders.kpack.io 2020-10-14T05:54:54Z
clusterstacks.kpack.io 2020-10-14T05:54:54Z
clusterstores.kpack.io 2020-10-14T05:54:54Z
images.kpack.io 2020-10-14T05:54:54Z
sourceresolvers.kpack.io 2020-10-14T05:54:54Z
kpackではbuilderをCRにより構成。
Builder = Store + Stack
apiVersion: kpack.io/v1alpha1
kind: ClusterStore
metadata:
name: default
spec:
sources:
- image: gcr.io/paketo-buildpacks/go
- image: gcr.io/paketo-buildpacks/java
- image: gcr.io/paketo-buildpacks/nodejs
apiVersion: kpack.io/v1alpha1
kind: ClusterStack
metadata:
name: full
spec:
id: "io.buildpacks.stacks.bionic"
buildImage:
image: "paketobuildpacks/build:full-cnb"
runImage:
image: "paketobuildpacks/run:full-cnb"
apiVersion: kpack.io/v1alpha1
kind: Builder
metadata:
name: my-builder
spec:
tag: masanara/my-builder
serviceAccount: kpack-service-account
stack:
name: full
kind: ClusterStack
store:
name: default
kind: ClusterStore
order:
- group:
- id: paketo-buildpacks/go
- group:
- id: paketo-buildpacks/java
- group:
- id: paketo-buildpacks/nodejs
Imageの作成
作成するコンテナイメージのレジストリ/タグ、ビルドに利用するBuilder、ビルドに利用す
るソースコードのリポジトリを指定。
apiVersion: kpack.io/v1alpha1
kind: Image
metadata:
name: go-demoweb
namespace: demo
spec:
tag: harbor.example.com/project/go-demoweb-kpack
serviceAccount: tutorial-service-account
builder:
name: tiny-builder
kind: Builder
source:
git:
url: https://github.com/user/go-demoweb
revision: master
デモ
デモにはTanzu Build Service / kpコマンドを利用しています
Container
Registry
1. イメージの作成
build-1image
$ kp image create go-helloworld 
--tag harbor.examle.com/app-image/go-helloworld 
--git https://github.com/user/go-helloworld.git 
--git-revision master
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Container
Registry
2. イメージの更新
imageimage’ build-1
build-2
masterブランチ
にコミット
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Container
Registry
3. ベースイメージの更新 (リベース)
image build-1
build-2
image’’
build-3
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Builder
(tiny)
Stack
(tiny)
Store
(Buildpacks)
$ kp image patch go-demoweb --cluster-builder tiny
kpackをつかうと
● Dockerfileを書かずにコンテナイメージを作成できる
● Kubernertesクラスター内でコンテナイメージを作成することが可能
● ベースイメージに脆弱性が発見された場合もリベースにより対応が簡単
● kpackだけでgitリポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動
化できる

More Related Content

What's hot

サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会ShuheiUda
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep DiveToru Makabe
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud Platform - Japan
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...Preferred Networks
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...NTT DATA Technology & Innovation
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはksk_ha
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)VirtualTech Japan Inc.
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことh-otter
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Masahito Zembutsu
 

What's hot (20)

サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサ
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったこと
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介
 

Similar to kpackによるコンテナイメージのビルド

DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介decode2016
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Masafumi Noguchi
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門Yuto Takei
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725Masafumi Noguchi
 
Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2Kazuhito Matsuda
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Masaya Aoyama
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)Motohiro OTSUKA
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)Masayuki Ozawa
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsYoshio Terada
 
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster Import
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster ImportRancher 2.0 Technical Preview & Bluemix Kubernetes Cluster Import
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster ImportBMXUG
 
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-cyberblack28 Ichikawa
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 

Similar to kpackによるコンテナイメージのビルド (20)

DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725
 
Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2Kubernetes Meetup Tokyo #23 kubebuilder-v2
Kubernetes Meetup Tokyo #23 kubebuilder-v2
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)
 
K8s install (single cluster)
K8s install (single cluster)K8s install (single cluster)
K8s install (single cluster)
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
 
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster Import
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster ImportRancher 2.0 Technical Preview & Bluemix Kubernetes Cluster Import
Rancher 2.0 Technical Preview & Bluemix Kubernetes Cluster Import
 
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-
kubetnetes etc.. & Rancher2.0 Technical Preview -import BLUMIX K8S Clusters-
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 

kpackによるコンテナイメージのビルド

  • 2. 本日の内容 kpackを使ってKubernetes環境でコンテナイメージを作成する方法を紹介します 1. コンテナイメージのビルド方法 2. Cloud Native Buildpacks 3. kpack 4. デモ ● 参考 ○ Dockerfileかきたくないでござる ○ Getting Started with VMware Tanzu Build Service 1.0 ○ Tanzu Build Service を触ってみる ○ Buildpacksのビルダーをスクラッチから作ってみる
  • 3. コンテナイメージのビルド方法 ● ホスト上でコンテナイメージをビルド ○ docker : Dockerfileからコンテナイメージを作成 ○ buildah : デーモンを利用せずに Dockerfileからコンテナイメージを作成 ○ pack : Cloud Native Buildpacksを利用してコンテナイメージを作成 ● Kubernetes上でコンテナイメージをビルド ○ kaniko : Kubernetes上でDockerfileからコンテナイメージを作成 ○ Source-to-Image (S2I) : OpenShiftの機能でコンテナイメージを作成 ○ kpack : Kubernetes上でCloud Native Buildpacksを利用してコンテナイメージを作成 ● クラウドサービス ○ Google Cloud Build : Cloud Native Buildpacksに対応 (2020/10/10) ○ AWS CodeBuild ○ Azure Container Registry Tasks
  • 4. Cloud Native Buildpacks(CNB) ? ● BuildpackはPaaSであるCloud FoundryやHerokuで利用されているアプリケー ション実行環境を作成する仕組み。 ○ ソースコードからアプリケーションのフレームワークを認識し、アプリケーションをビルドし、実行可能 なイメージ(Droplet/Slug)を作成する。 ● Cloud Native BuildpacksはDockerやKubernetes等でBuildpackの仕組みを活用 してOCI準拠のコンテナイメージを作成する事を可能にする。 ○ CNBはCNCFのSandboxプロジェクト。 ○ CNBの実装 ■ Paketo Buildpacks : Cloud Foundry Foundationのプロジェクト ■ Heroku Buildpacks : Heroku向けのBuildpack ■ Google Cloud Buildpacks : Google Cloudのコンテナプラットフォームに最適化 https://buildpacks.io/
  • 5. CNBのコンポーネント ● Builder : ビルドに利用するコンテナイメージ。Buildpackとビルドに利用するBuild/Runイメー ジ(Stack)で構成される。 ● Buildpack : ソースコードの検出、アプリケーションのビルドや実行方法を定義 ● Stack : Builderがイメージ作成時に利用する、ビルド用・実行用のイメージ ● Lifecycle : Buildpackの実行をオーケストレーションし、アプリケーションイメージを組み立て る。 ● Platform : OCIイメージを作成するために利用されるプラットフォーム(pack cli、kpack、 tekton等) https://buildpacks.io/docs/concepts/components/
  • 6. pack : Buildpack CLI ● Dockerとpackコマンドによりコンテナイメージを作 成 ● Builderイメージを指定して、Dockerfileを利用せ ずにアプリケーションソースコードから、アプリケー ションを自動検出してコンテナイメージを作成 ● ビルドしたコンテナイメージをレジストリにプッシュ することも可能。(--publish) ● リベースによりベースイメージだけ変更することも 可能。(pack rebase) # git clone https://github.com/buildpacks/samples # cd samples # ls apps/ aspnet bash-script batch-script java-maven kotlin-gradle README.md ruby-bundler # ls java-maven/ mvnw mvnw.cmd pom.xml src # docker images REPOSITORY TAG IMAGE ID CREATED SIZE # pack build -p apps/java-maven --builder cnbs/sample-builder:bionic sample-app ===> DETECTING [detector] samples/java-maven 0.0.1 ===> ANALYZING ===> RESTORING ===> BUILDING [builder] ---> Java buildpack [builder] ---> Installing JDK ===> EXPORTING [exporter] Adding layer 'samples/java-maven:jdk' [exporter] Adding 1/1 app layer(s) [exporter] Adding layer 'launcher' [exporter] Adding layer 'config' [exporter] Adding layer 'process-types' [exporter] Adding label 'io.buildpacks.lifecycle.metadata' [exporter] Adding label 'io.buildpacks.build.metadata' [exporter] Adding label 'io.buildpacks.project.metadata' [exporter] Setting default process type 'web' [exporter] *** Images (68472453e67b): [exporter] sample-app [exporter] Reusing cache layer 'samples/java-maven:jdk' [exporter] Adding cache layer 'samples/java-maven:maven_m2' Successfully built image sample-app # docker images REPOSITORY TAG IMAGE ID CREATED SIZE cnbs/sample-stack-run bionic d57edd2cacb1 3 weeks ago 70.3MB cnbs/sample-builder bionic a1fff020741a 40 years ago 180MB sample-app latest 68472453e67b 40 years ago 300MB buildpacksio/lifecycle 0.9.1 1a8d17b1a7a7 40 years ago 15.1MB https://buildpacks.io/docs/app-journey/ base-1 Java App base-2 Java App rebase
  • 7. kpack ● Kubernetes Native Container Build Service ● Kubernetesを拡張して、Kubernetes上でCNBを利用するための仕組み ○ コンテナイメージのビルドは Kubernetes上のPod内で行われる ○ builderやstack、作成されるimage等がKubernetesのCRD(Custom Resource Definition)として管 理される。 ● VMware(旧Pivotal)が中心となって開発 ○ Tanzu Build Service(TBS)はkpackをVMwareがサポートするもの (2020/8 GA v1.0.2) ○ TBSではStackやBuilder等が事前定義されていて、 kpack向けのCustom Resourceを直接操作せ ずにkpコマンドを利用して簡単に利用可能 ● Cloud Foundry for Kubernetes(cf-for-k8s)のコンポーネントとしても利用されてい る。(cf pushされたソースコードからコンテナイメージをビルド) https://github.com/pivotal/kpack
  • 8. kpackのインストール ● kpack Tutorial : https://github.com/pivotal/kpack/blob/master/docs/tutorial.md # kubectl get pods -n kpack NAME READY STATUS RESTARTS AGE kpack-controller-6f57d5f7d-zzrf7 1/1 Running 0 10m kpack-webhook-5cf99c5cd7-tf87m 1/1 Running 0 10m # kubectl get crd | grep kpack builders.kpack.io 2020-10-14T05:54:54Z builds.kpack.io 2020-10-14T05:54:54Z clusterbuilders.kpack.io 2020-10-14T05:54:54Z clusterstacks.kpack.io 2020-10-14T05:54:54Z clusterstores.kpack.io 2020-10-14T05:54:54Z images.kpack.io 2020-10-14T05:54:54Z sourceresolvers.kpack.io 2020-10-14T05:54:54Z
  • 9. kpackではbuilderをCRにより構成。 Builder = Store + Stack apiVersion: kpack.io/v1alpha1 kind: ClusterStore metadata: name: default spec: sources: - image: gcr.io/paketo-buildpacks/go - image: gcr.io/paketo-buildpacks/java - image: gcr.io/paketo-buildpacks/nodejs apiVersion: kpack.io/v1alpha1 kind: ClusterStack metadata: name: full spec: id: "io.buildpacks.stacks.bionic" buildImage: image: "paketobuildpacks/build:full-cnb" runImage: image: "paketobuildpacks/run:full-cnb" apiVersion: kpack.io/v1alpha1 kind: Builder metadata: name: my-builder spec: tag: masanara/my-builder serviceAccount: kpack-service-account stack: name: full kind: ClusterStack store: name: default kind: ClusterStore order: - group: - id: paketo-buildpacks/go - group: - id: paketo-buildpacks/java - group: - id: paketo-buildpacks/nodejs
  • 10. Imageの作成 作成するコンテナイメージのレジストリ/タグ、ビルドに利用するBuilder、ビルドに利用す るソースコードのリポジトリを指定。 apiVersion: kpack.io/v1alpha1 kind: Image metadata: name: go-demoweb namespace: demo spec: tag: harbor.example.com/project/go-demoweb-kpack serviceAccount: tutorial-service-account builder: name: tiny-builder kind: Builder source: git: url: https://github.com/user/go-demoweb revision: master
  • 11. デモ デモにはTanzu Build Service / kpコマンドを利用しています
  • 12. Container Registry 1. イメージの作成 build-1image $ kp image create go-helloworld --tag harbor.examle.com/app-image/go-helloworld --git https://github.com/user/go-helloworld.git --git-revision master Builder (default) Stack (full) Store (Buildpacks)
  • 14. Container Registry 3. ベースイメージの更新 (リベース) image build-1 build-2 image’’ build-3 Builder (default) Stack (full) Store (Buildpacks) Builder (tiny) Stack (tiny) Store (Buildpacks) $ kp image patch go-demoweb --cluster-builder tiny
  • 15. kpackをつかうと ● Dockerfileを書かずにコンテナイメージを作成できる ● Kubernertesクラスター内でコンテナイメージを作成することが可能 ● ベースイメージに脆弱性が発見された場合もリベースにより対応が簡単 ● kpackだけでgitリポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる