Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
kpackによるコンテナイメージのビルド
Search
masanara
October 21, 2020
Technology
0
100
kpackによるコンテナイメージのビルド
kpackを使ってKubernetes環境でコンテナイメージを作成する方法を紹介します
masanara
October 21, 2020
Tweet
Share
More Decks by masanara
See All by masanara
vSphere環境でLLMをServeする
masanara
0
200
Cartographer入門
masanara
0
460
EKS Anywhere on vSphere
masanara
0
41
Harbor RegistryのReplication機能
masanara
0
290
Kubernetes Operator for vSphere VM
masanara
0
51
Other Decks in Technology
See All in Technology
Oracle Audit Vault and Database Firewall 20 概要
oracle4engineer
PRO
3
1.7k
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
2.2k
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
150
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
11
3.9k
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
700
Clineを含めたAIエージェントを 大規模組織に導入し、投資対効果を考える / Introducing AI agents into your organization
i35_267
4
1.6k
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.2k
“社内”だけで完結していた私が、AWS Community Builder になるまで
nagisa53
1
390
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
230
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
2
210
Snowflake Summit 2025 データエンジニアリング関連新機能紹介 / Snowflake Summit 2025 What's New about Data Engineering
tiltmax3
0
310
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
160
Featured
See All Featured
Docker and Python
trallard
44
3.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
The Invisible Side of Design
smashingmag
299
51k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Building Applications with DynamoDB
mza
95
6.5k
What's in a price? How to price your products and services
michaelherold
246
12k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
Side Projects
sachag
455
42k
Designing Experiences People Love
moore
142
24k
Transcript
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-1 image $ 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. イメージの更新 image image’ 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リポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる