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
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
480
EKS Anywhere on vSphere
masanara
0
45
Harbor RegistryのReplication機能
masanara
0
360
Kubernetes Operator for vSphere VM
masanara
0
56
Other Decks in Technology
See All in Technology
普段使ってるClaude Skillsの紹介(by Notebooklm)
zerebom
8
2.6k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
300
LayerX QA Night#1
koyaman2
0
300
Microsoft Agent Frameworkの可観測性
tomokusaba
1
120
Snowflake Industry Days 2025 Nowcast
takumimukaiyama
0
150
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
210
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
2.2k
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
130
コールドスタンバイ構成でCDは可能か
hiramax
0
130
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
100
AWS re:Invent2025最新動向まとめ(NRIグループre:Cap 2025)
gamogamo
0
140
Knowledge Work の AI Backend
kworkdev
PRO
0
340
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
Docker and Python
trallard
47
3.7k
How to build a perfect <img>
jonoalderson
0
4.8k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
180
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
980
Bash Introduction
62gerente
615
210k
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Code Reviewing Like a Champion
maltzj
527
40k
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リポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる