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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
masanara
October 21, 2020
Technology
0
110
kpackによるコンテナイメージのビルド
kpackを使ってKubernetes環境でコンテナイメージを作成する方法を紹介します
masanara
October 21, 2020
Tweet
Share
More Decks by masanara
See All by masanara
vSphere環境でLLMをServeする
masanara
0
240
Cartographer入門
masanara
0
490
EKS Anywhere on vSphere
masanara
0
46
Harbor RegistryのReplication機能
masanara
0
370
Kubernetes Operator for vSphere VM
masanara
0
59
Other Decks in Technology
See All in Technology
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.8k
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
590
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
370
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
470
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
180
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
640
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.5k
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
120
Context Engineeringの取り組み
nutslove
0
360
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
190
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Mobile First: as difficult as doing things right
swwweet
225
10k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
420
Prompt Engineering for Job Search
mfonobong
0
160
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
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リポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる