Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
130
AWS Control Tower導入してハッピーになりました
shogomuranushi
0
240
EKS を使ってる人から見た App Runner
shogomuranushi
7
2.4k
Suggested Topicの質問に可能な限り答えてみた
shogomuranushi
0
1.1k
顧客のアプリケーションコードが動くマルチテナント環境における課題とEKSにたどり着くまで
shogomuranushi
0
1.6k
ちょいテク100本ノック。できるまで帰しません 。今から使えるちょいテク集
shogomuranushi
1
2.7k
after of Infrastructure-as-Code-is-very-tired
shogomuranushi
16
3.4k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
65
4.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Code Reviewing Like a Champion
maltzj
520
39k
We Have a Design System, Now What?
morganepeng
50
7.2k
Scaling GitHub
holman
458
140k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Done Done
chrislema
181
16k
Speed Design
sergeychernyshev
25
640
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Six Lessons from altMBA
skipperchong
27
3.5k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
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 ご静聴ありがとうございました