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
220
Cartographer入門
masanara
0
470
EKS Anywhere on vSphere
masanara
0
43
Harbor RegistryのReplication機能
masanara
0
330
Kubernetes Operator for vSphere VM
masanara
0
54
Other Decks in Technology
See All in Technology
Function calling機能をPLaMo2に実装するには / PFN LLMセミナー
pfn
PRO
0
990
いま注目しているデータエンジニアリングの論点
ikkimiyazaki
0
630
多野優介
tanoyusuke
1
480
英語は話せません!それでも海外チームと信頼関係を作るため、対話を重ねた2ヶ月間のまなび
niioka_97
0
130
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
4
170
"プロポーザルってなんか怖そう"という境界を超えてみた@TSUDOI by giftee Tech #1
shilo113
0
150
PLaMo2シリーズのvLLM実装 / PFN LLM セミナー
pfn
PRO
2
1k
Shirankedo NOCで見えてきたeduroam/OpenRoaming運用ノウハウと課題 - BAKUCHIKU BANBAN #2
marokiki
0
170
AI時代こそ求められる設計力- AWSクラウドデザインパターン3選で信頼性と拡張性を高める-
kenichirokimura
3
160
空間を設計する力を考える / 20251004 Naoki Takahashi
shift_evolve
PRO
4
440
大規模サーバーレスAPIの堅牢性・信頼性設計 〜AWSのベストプラクティスから始まる現実的制約との向き合い方〜
maimyyym
4
2.8k
自動テストのコストと向き合ってみた
qa
0
200
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Language of Interfaces
destraynor
162
25k
A Tale of Four Properties
chriscoyier
160
23k
GitHub's CSS Performance
jonrohan
1032
470k
We Have a Design System, Now What?
morganepeng
53
7.8k
Being A Developer After 40
akosma
91
590k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Producing Creativity
orderedlist
PRO
347
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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リポジトリのコミットをトリガーにしてコンテナイメージのビルドを自動 化できる