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
Dockerとk8s, helmをTwelve Factor Appsの観点 からざっくり整理
Search
Recruit Technologies
July 19, 2018
Technology
3
400
Dockerとk8s, helmをTwelve Factor Appsの観点 からざっくり整理
2018/07/19 Docker Meetup Tokyo #24での、藤原の講演資料になります
Recruit Technologies
July 19, 2018
Tweet
Share
More Decks by Recruit Technologies
See All by Recruit Technologies
障害はチャンスだ! 障害を前向きに捉える
rtechkouhou
1
640
Flutter移行の苦労と、乗り越えた先に得られたもの
rtechkouhou
3
11k
ここ数年間のタウンワークiOSアプリのエンジニアのチャレンジ
rtechkouhou
1
1.5k
大規模環境をAWS Transit Gatewayで設計/移行する前に考える3つのポイントと移行への挑戦
rtechkouhou
1
1.9k
【61期 新人BootCamp】TOC入門
rtechkouhou
3
41k
【RTC新人研修 】 TPS
rtechkouhou
1
41k
Android Boot Camp 2020
rtechkouhou
0
41k
HTML/CSS
rtechkouhou
10
50k
TypeScript Bootcamp 2020
rtechkouhou
9
45k
Other Decks in Technology
See All in Technology
Evangelismo técnico: ¿qué, cómo y por qué?
trishagee
0
360
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
940
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
320
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
860
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
13k
複雑なState管理からの脱却
sansantech
PRO
1
150
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
459
33k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
What's in a price? How to price your products and services
michaelherold
243
12k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Transcript
Dockerとk8s, helm をTwelve Factor Appsの観点 からざっくり整理 (Docker Meetup Tokyo #24LT資料)
1 (C) Recruit TechnologiesCo.,Ltd. All rights reserved.
最初に 2 (C) Recruit Technologies Co.,Ltd. All rights reserved.
最初に 3 (C) Recruit Technologies Co.,Ltd. All rights reserved.
最初に 4 (C) Recruit Technologies Co.,Ltd. All rights reserved. ではないです。(ごめんなさい)
注意事項 5 (C) Recruit Technologies Co.,Ltd. All rights reserved. 本発表の内容は個⼈の⾒解であり、
所属組織としての⾒解を表すものではありません。
⾃⼰紹介 藤原 涼⾺ 株式会社リクルートテクノロジーズ ITE本部 SRE部 ISEG 経歴 2011-2015ユーザ系SIer にてR&D
2016/1〜 リクルートテクノロジーズに⼊社 主な活動(社内外含む) • コンテナを中⼼とした先進アーキテクチャの事業への装着 • Rancher JPコアメンバー • 寄稿(@IT 先⾏事例に学ぶKubernetes 企業活⽤の現実) 趣味 勉強会で⾊々喋る ⼦供と遊ぶ 6 (C) Recruit Technologies Co.,Ltd. All rights reserved.
本LTの意図 をみていて、ふとTwelve-Factor appの原則とDocker, Kubernetes, Helmの関係を復習も兼ねて整理したくなっ たのでトライしてみました。 7 (C) Recruit Technologies
Co.,Ltd. All rights reserved. https://12factor.net/ ຊMSAຊEffective DevopsͳͲབྷΊͯཧ͍ͨ͠
(前提の確認)Twelve-Factor appについて (1/2) • Heroku上でSaaSアプリケーションを作るためのプラク ティスをまとめたもの。 • Heroku⾃体がコンテナとの関係も深い 8 (C)
Recruit Technologies Co.,Ltd. All rights reserved.
(前提の確認)Twelve-Factor appについて (2/2) 1. コードベース 2. 依存関係 3. 設定 4.
バックエンドサービス 5. ビルド・リリース・実⾏ 6. プロセス 9 (C) Recruit Technologies Co.,Ltd. All rights reserved. 7. ポートバインディング 8. 並⾏性 9. 廃棄容易性 10.開発/本番⼀致 11.ログ 12.管理プロセス
1. コードベース 同じコードベース(リポジトリ)を起源とする 10 (C) Recruit Technologies Co.,Ltd. All rights
reserved. Docker Kubernetes Helm それぞれのツールがコードで 主に管理する範囲を整理 狭 広 ୯Ұͷ ίϯςφ ෳίϯςφ ؒͷؔ νϟʔτ (k8s্Ͱఆٛ͞Εͨ ෳΞϓϦέʔγϣϯͷؔ)
2. 依存関係 依存関係を明⽰的に宣⾔し分離する 11 (C) Recruit Technologies Co.,Ltd. All rights
reserved. Docker Kubernetes Helm それぞれのツールの中で宣⾔する依存関係を整理 コンテナイメージ間 リソース定義間 チャート間 Dockerfile • FROM句 • マルチステージビルド Deployment ReplicaSet Pod (コンテナ & コンテナイメージ) Service 親チャート ⼦チャート ) ) ) & ) ( ) ) requirements.yaml charts/
3. 環境 設定を環境変数に格納する 12 (C) Recruit Technologies Co.,Ltd. All rights
reserved. Docker Kubernetes Helm それぞれのツールの中で宣⾔される依存関係を整理 1. Dockerfile • ENV 2. docke run -e 1. ConfigMap 2. Secrets 1. values.yaml
4. バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う 13 (C) Recruit Technologies Co.,Ltd. All rights
reserved. 環境変数を使ってバックエンドサービスは切り替えする (またはDNSをうまく活⽤、認証情報は後述)
5. ビルド・リリース・実⾏ ビルド、リリース、実⾏の3つのステージを厳密に分離する 14 (C) Recruit Technologies Co.,Ltd. All rights
reserved. Docker (docker) Kubernetes (kubectl) Helm (helm) ビルド リリース 実⾏ Helm͋Γ Helmͳ͠ kubectl apply –f … kubectl create –f … docker build helm package? helm install helm upgrade ຌྫ
6. プロセス よくあるDockerのベストプラクティスを守る 1. 1 コンテナ = 1プロセス 2. ステートレス
& シェアードナッシング* 15 (C) Recruit Technologies Co.,Ltd. All rights reserved. *ͨͩ͠ɺ2ʹ͍ͭͯࠓޙͷঢ়گʹΑͬͯগͮͭ͠มΘΔ͔
7.ポートバインディング ポートバインディングを通してサービスを公開する 16 (C) Recruit Technologies Co.,Ltd. All rights reserved.
Docker Kubernetes Helm Dockerfileͷ EXPOSE۟ (ͲͷϙʔτͰListenͯ͠Δ͔) ServiceϦιʔε (ϙʔτόΠϯσΟϯάΛఆٛ) k8sϦιʔεͷ ςϯϓϨʔςΟϯάΛհͯ͠ ϙʔτόΠϯσΟϯάΛ੍ޚ
8. 並⾏性 プロセスモデルによってスケールアウトする 17 (C) Recruit Technologies Co.,Ltd. All rights
reserved. Docker Kubernetes Helm Deploymentsɺ Replicasetͷ ϨϓϦΧมߋʹ Α੍ͬͯޚ k8sͱಉ͡ͷΛ helm upgrade + values.yaml(ͳͲ) ʹΑ੍ͬͯޚ ରԠ͢Δ ػೳͳ͠ (swarmは⼀旦スコープ外)
9.廃棄容易性 コンテナ前提なので割愛 SIGTERMのハンドリングについて注意 18 (C) Recruit Technologies Co.,Ltd. All rights
reserved.
10. 開発・本番⼀致 開発、ステージング、本番環境をできるだけ⼀致させた状 態を保つ 19 (C) Recruit Technologies Co.,Ltd. All
rights reserved. Docker Kubernetes Helm (環境間で)何の差異を無くすか、 何の差異をカバーしてくれるかを整理 コンテナ イメージ 差異を無くして くれるもの コンテナ構成 カバーするもの 環境変数・機密情報など (with ConfigMap, Secrets) 凡例 + α
11. ログ STDOUT/STDERRに出⼒して集約 • オンプレ • ELKスタックなどを活⽤ • パブリッククラウド •
AWS … CloudWatch Logs, Elasticsearch • GCP … StackDriver Logs 20 (C) Recruit Technologies Co.,Ltd. All rights reserved. 本番運⽤だと必須
12. 管理プロセス 管理タスクを1回限りのプロセスとして実⾏する (例えば、RoRにおける rake db:migrate など) 21 (C) Recruit
Technologies Co.,Ltd. All rights reserved. Docker Kubernetes Helm Job, CronJob の利⽤ docker run --rm … ない
まとめ(1/3) Twelve Factor Appの考え⽅ × Docker, k8s, Helm で個々のツールの役割や関係を整理しました。 22
(C) Recruit Technologies Co.,Ltd. All rights reserved.
まとめ (2/3) • 開発の中で出てきた要件をどのツールに担わせるべきか、 といった判断に役⽴てることができそうです • そもそもこれ全部必要なんだっけ?ということも改めて 整理できそうです • ツールセットの隙間(抜け漏れ)を⾒つけられることがあ
るので良いかもしれません • とはいえ単⼀の考え⽅のみだと不⾜は明らかなので複数の観点か らの確認は必要です 23 (C) Recruit Technologies Co.,Ltd. All rights reserved. *ݸਓతʹTwelve Factor Apps ϓϩμΫγϣϯϨσΟϚΠΫϩαʔϏε͕ ཧʹΦεεϝͰ͢ɻ
まとめ(3/3) • “こんな感じで整理して理解してるよ”という⽅、懇親会 にて是⾮ディスカッションさせてください! 24 (C) Recruit Technologies Co.,Ltd. All
rights reserved.