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
jaws-ug Kyoto 20181026 Container-as-a-Service w...
Search
shogomuranushi
October 26, 2018
1
250
jaws-ug Kyoto 20181026 Container-as-a-Service with Spotinst
shogomuranushi
October 26, 2018
Tweet
Share
More Decks by shogomuranushi
See All by shogomuranushi
ノーコード x ChatBotで遊んでたら ReActを実装しそうだった話
shogomuranushi
0
1.2k
ChatGPT関連情報の追い方、個人・業務での使い方、サービスへの組み込み方、 ABEJAでの取り組み4例、ここ2週間のトピックなど行けるところまで
shogomuranushi
5
1.9k
FPが教える iDeCo のすごさ
shogomuranushi
0
120
AWS Control Tower導入してハッピーになりました
shogomuranushi
0
230
EKS を使ってる人から見た App Runner
shogomuranushi
7
2.4k
Suggested Topicの質問に可能な限り答えてみた
shogomuranushi
0
1.1k
顧客のアプリケーションコードが動くマルチテナント環境における課題とEKSにたどり着くまで
shogomuranushi
0
1.5k
ちょいテク100本ノック。できるまで帰しません 。今から使えるちょいテク集
shogomuranushi
1
2.7k
after of Infrastructure-as-Code-is-very-tired
shogomuranushi
16
3.3k
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
A better future with KSS
kneath
238
17k
Navigating Team Friction
lara
183
14k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
BBQ
matthewcrist
85
9.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The Cult of Friendly URLs
andyhume
78
6k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Gamification - CAS2011
davidbonilla
80
5k
Designing for humans not robots
tammielis
249
25k
Transcript
JAWS-UG Kyoto 2018/10/26 ABEJA, Inc. Shogo Muranushi 15分で始める Container as
a Service with スポットインスタンス
2
3
4 略歴トピック • インフラエンジニア • AWSを採⽤しハマる • AWSをたくさん使う • 資格を5冠取得
• AWSでDeepLearning プラットフォーム作る • インフラ => SRE Tech Lead • マイクロサービスで遊ぶ • プロダクトオーナーになる
5 アジェンダ 1. Dockerとは 2. Dockerオーケストレーションツール云々 3. Container as a
Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅
6 まずは質問 •Docker使ったことある⼈? •KubernetesやECSのようなサービス・ツール使ったこ とある⼈? •スポットインスタンス使ったことある⼈?
7 今⽇のゴール
8
9 •Dockerとは •Dockerの歴史 •なぜDockerを使うのか •Dockerを本番運⽤する上で何が課題になるのか
• 2013年リリース • コンテナ型仮想環境を提供 • コンテナにアプリケーションを内包させる • LinuxコンテナやWindowsコンテナあり • 様々なインフラやOSで動作
10 とは
11 の歴史 • 2013年 • dotCloudがOSSで公開 • 2014年 • Googleは毎週20億のコンテナを起動していた
• 1.0リリース • 2015年 • マイクロソフト、Google、Red Hat、VMware、Amazon Web Servicesらと共同でコン テナの標準化団体「Open Container Initiative」の発⾜ • (2011年) • Heroku エンジニアが The Twelve-Factor App を提唱 出展元:https://www.sdxcentral.com/cloud/containers/definitions/containers-vs-vms/
12 The Twelve-Factor App (2011) Webアプリケーションを使いやすい形でスケーラブルにするための⽅法論 • I. コードベース •
バージョン管理されている1つのコードベースと複数のデプロイ • II. 依存関係 • 依存関係を明⽰的に宣⾔し分離する • III. 設定 • 設定を環境変数に格納する • IV. バックエンドサービス • バックエンドサービスをアタッチされたリソースとして扱う • V. ビルド、リリース、実⾏ • ビルド、リリース、実⾏の3つのステージを厳密に分離する • VI. プロセス • アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する
13 • VII. ポートバインディング • ポートバインディングを通してサービスを公開する • VIII. 並⾏性 •
プロセスモデルによってスケールアウトする • IX. 廃棄容易性 • ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する • X. 開発/本番⼀致 • 開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ • XI. ログ • ログをイベントストリームとして扱う • XII. 管理プロセス • 管理タスクを1回限りのプロセスとして実⾏する The Twelve-Factor App (2011) Webアプリケーションを使いやすい形でスケーラブルにするための⽅法論
14 なぜDockerを使うのか • リソース集約効率が上がる • 必要な⾔語やライブラリを閉じ込めるため、 ⼀つのサーバで複数の⾔語やバージョンを稼働させられる • 複数環境載せてもセキュリティ上分離可能(厳密には・・) •
環境の再現性が⾼い • アプリの実⾏環境構築が容易で、構築⾃体や問題発⽣の再現性が⾼い • ポータビリティ性が⾼い • どの環境でも動かすことが可能で、移⾏や複数環境構築が容易 • ローカルと本番の環境を限りなく合わせることも可能で、開発・テストが容易
15 Dockerを本番運⽤する上で何が課題になるのか • 複数コンテナの管理 • 本番利⽤するときは1コンテナではなくWeb、App、DBなど複数 コンテナ • 可⽤性 •
正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、セキュリティ、etc • それらを管理するツールが必要になってきた
16 オーケストレーションツール
17 以下の課題を解決 • 複数コンテナの管理 • 本番利⽤するときは1コンテナじゃなく複数コンテナ • Web、App、DBなど種類も複数 • 可⽤性
• 正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、etc • それらを管理するツールが必要になってきた
18 オーケストレーションツールの歴史 • 2014 • GoogleがKubernetes、DockerがDocker swarm、AWSがECSを発表 • Mesos 0.21、Rancher
0.4リリース • 2015 • Docker swarm、Kubernetes 1.0リリース • CNCF(Cloud Native Computing Foundation)設⽴ • 2016 • Apache Mesos1.0 + Dockerサポート • Rancher1.0リリース
19 オーケストレーションツールの歴史 • 2017 • Fortune 100企業のKubernetesの採⽤率は54%を突破と報道(Redmonk) • DockerがKubernetesの統合を発表 •
Azure、AWSもKubernetesマネージドサービス提供 • 2018 • Rancher2.0リリース + Kubernetesを標準に
20 なぜKubernetesがデファクトスタンダードになったのか • 定期的なメジャーアップデート • 3ヶ⽉ごとにアップデートを繰り返し、エンタープライズからのフィードバックも反 映。本番稼働に耐えうるソフトウェアとして信頼を得た。 • によるエコシステムの拡⼤ •
Kubernetesの成⻑と共にCNCFに各⼤⼿企業が参加 • Alibaba、AWS、Google、IBM、Microsoft、Oracle、Redhat、VMware、etc • 様々な良質なOSSがCNCFのエコシステムに • Prometheus、Fluentd、GRPC、containerd、cni、envoy、helm、etc • その他の要素含め、これらにより企業と開発者が集まるサイクルができて、圧倒的な速度 で成⻑を遂げた
21 と、⾔われていますが個⼈的には • 設計がイマドキ • ベストプラクティスに添えば、良い設計になる • エコシステムのOSSもセンスが良い • Istio(Envoy)、Kubeflow、Knative、etc
• マイクロサービスの課題を解決しやすい • UNIXの哲学、The Twelve-Factor App、コンテナデザインパターンを採⽤ • マイクロコンテナになる • マイクロサービス化していく • マイクロサービスの管理⾟い • Istio登場 <<=== イマココ
22 Kubernetesは完璧か?使いこなすには? • Kubernetesは銀の弾丸ではない • マイクロサービスに耐えうる組織設計と⽂化形成と相性が良い(メルカリさん) • 組織設計 = コンウェイの法則
• ⽂化形成 = 価値提供の速度向上・⽣産性向上を徹底する⽂化 • ただし、マイクロサービスには課題がある • 分散システムのトレーシング、多数のシステム管理、⼀貫性、テスト、、、 • 完璧ではないけど、徐々に良い⽅向に向かっています • コンウェイの法則 • 組織の設計するシステムは、その組織のコミュニケーション構造をそのまま反映した設計になる
23
24
25
26 Container as a Service
27 話を戻して Container as a Service の定義 •IaaS = Infrastructure
as a Service •PaaS = Platform as a Service •Container as a Service = Container基盤を「サービス」として利⽤する
28 Container as a Serviceイメージ Container Definition Container Definition 28
Black box Infra
29 AWS Fargate = Container as a Service? • Yes
• しかしEC2のオンデマンド、スポットインスタンスより⾼い • 参考価格 ( Tokyo region ) • Fargate = 2CPU / 8GB = $150/month • オンデマンド(m4.large) = $95/month • スポットインスタンス(m4.large) = $25/month • 細かい計算やPros/Consはブログを参照ください
30 Fargateは⾼いので ECSにスポットインスタンスを組み合わせた
31 しかしECSには罠があった • ECSとEC2 (AutoScale)の溝 • ECSのリソース不⾜(ECSイベント)を検知してスケールしてくれない • EC2 AutoScaleはCloudWatchメトリクスベースのスケーリング
• 余剰リソースが空いてても集約してくれない • コンテナサイズでリソースを確保してくれない • ECSはCPU/MEMの空き容量ベースの確保 • インスタンスのTerminate時に⾃動でコンテナをDrainしてくれない • ⾃分でコンテナをDrainしてからインスタンスをTerminateする必要がある • ホストのBlue / Green Deploymentは⾃分で構築する必要がある (Teraform?CloudFormation?)
32
33 それらを解決してくれるのが
34 ( ElastiGroup )
35 ( ElastiGroup ECS Integration ) • ECSのリソース不⾜(ECSイベント)を検知して⾃動でスケール • 余剰リソースがギリギリでも⼤丈夫
• 余剰リソースが空いたら⾃動で集約 • 集約効率がギリギリまで上がる • 必要なコンテナサイズ x 個数でリソースを確保 • 必要なコンテナサイズとCPU/MEMを考慮した空き容量計算が不要に • インスタンスのTerminate時に⾃動でコンテナをDrainする • 気をつける必要がなく安全にインスタンスを停⽌できる • ホストのBlue / Green Deploymentを強制してくれる • 安全に⼊れ替えができる
36 完成図 Container Definition Container Definition 36
37 15分で作る⼿順
38 前提 1. AWSアカウントがある(10分) 2. Spotinstアカウントがある(10分) 1. AWSアカウントを連携している(5分) 2. (14⽇間無料、クレカ不要)
39 先⽇、AWS公式のQuick Startが公開された。けど https://aws.amazon.com/jp/about-aws/whats-new/2018/10/deploy-spotinst-elastigroup-for- amazon-ecs-on-aws-with-new-quick-start/
40 作り⽅ 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分) 2. SpotinstでImportする(2分) 1. SecurityGroupやIAM、Userdataなど全て引き継がれる
3. EC2がデプロイされるのを待つ(3分) 4. 古いEC2(AutoScalingGroup)を0台にする(1分)
41 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)
42 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)
43 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)
44 2. SpotinstでImportする(2分) C
45 2. SpotinstでImportする(2分)
46 2. SpotinstでImportする(2分)
47 3. EC2がデプロイされるのを待つ(3分)
48 4. 古いEC2(AutoScalingGroup)を0台にする(1分)
49 再掲 ( ElastiGroup ECS Integration ) • ECSのリソース不⾜(ECSイベント)を検知して⾃動でスケール •
余剰リソースがギリギリでも⼤丈夫 • 余剰リソースが空いたら⾃動で集約 • 集約効率がギリギリまで上がる • 必要なコンテナサイズ x 個数でリソースを確保 • 必要なコンテナサイズとCPU/MEMを考慮した空き容量計算が不要に • インスタンスのTerminate時に⾃動でコンテナをDrainする • 気をつける必要がなく安全にインスタンスを停⽌できる • ホストのBlue / Green Deploymentを強制してくれる • 安全に⼊れ替えができる
50
51 ECSのリソース不⾜(ECSイベント)を 検知して⾃動でスケール Container Definition Container Definition 51 Black box
Infra
52 余剰リソースが空いたら⾃動で集約 Container Definition Container Definition 52 Black box Infra
53 必要なコンテナサイズ x 個数でリソースを確保 Container Definition Container Definition 53 Black
box Infra
54 インスタンスのTerminate時に ⾃動でコンテナをDrainする Container Definition Container Definition 54 Black box
Infra
55 Container as a Service With スポットインスタンスの完成
56 まとめ 1. Dockerとは 2. Dockerオーケストレーションツール云々 3. Container as a
Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅
57 ご静聴ありがとうございました