Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
230
Cartographer入門
masanara
0
480
EKS Anywhere on vSphere
masanara
0
45
Harbor RegistryのReplication機能
masanara
0
350
Kubernetes Operator for vSphere VM
masanara
0
55
Other Decks in Technology
See All in Technology
生成AI時代の自動E2Eテスト運用とPlaywright実践知_引持力哉
legalontechnologies
PRO
0
210
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
バグハンター視点によるサプライチェーンの脆弱性
scgajge12
3
970
小さな判断で育つ、大きな意思決定力 / 20251204 Takahiro Kinjo
shift_evolve
PRO
1
570
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
180
Bakuraku Engineering Team Deck
layerx
PRO
12
7k
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
0
280
因果AIへの招待
sshimizu2006
0
920
[JAWS-UG 横浜支部 #91]DevOps Agent vs CloudWatch Investigations -比較と実践-
sh_fk2
1
240
Noを伝える技術2025: 爆速合意形成のためのNICOフレームワーク速習 #pmconf2025
aki_iinuma
2
2k
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
0
680
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
390
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
186
22k
Producing Creativity
orderedlist
PRO
348
40k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Fireside Chat
paigeccino
41
3.7k
Code Reviewing Like a Champion
maltzj
527
40k
Building Adaptive Systems
keathley
44
2.9k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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リポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる