Save 37% off PRO during our Black Friday Sale! »

jaws-ug Kyoto 20181026 Container-as-a-Service with Spotinst

F8f7692cb46c0f7feda5210a46b47bcf?s=47 shogomuranushi
October 26, 2018
220

jaws-ug Kyoto 20181026 Container-as-a-Service with Spotinst

F8f7692cb46c0f7feda5210a46b47bcf?s=128

shogomuranushi

October 26, 2018
Tweet

Transcript

  1. JAWS-UG Kyoto 2018/10/26 ABEJA, Inc. Shogo Muranushi 15分で始める Container as

    a Service with スポットインスタンス
  2. 2

  3. 3

  4. 4 略歴トピック • インフラエンジニア • AWSを採⽤しハマる • AWSをたくさん使う • 資格を5冠取得

    • AWSでDeepLearning
 プラットフォーム作る • インフラ => SRE Tech Lead • マイクロサービスで遊ぶ • プロダクトオーナーになる
  5. 5 アジェンダ 1. Dockerとは 2. Dockerオーケストレーションツール云々 3. Container as a

    Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅
  6. 6 まずは質問 •Docker使ったことある⼈? •KubernetesやECSのようなサービス・ツール使ったこ とある⼈? •スポットインスタンス使ったことある⼈?

  7. 7 今⽇のゴール

  8. 8

  9. 9 •Dockerとは •Dockerの歴史 •なぜDockerを使うのか •Dockerを本番運⽤する上で何が課題になるのか

  10. • 2013年リリース • コンテナ型仮想環境を提供 • コンテナにアプリケーションを内包させる • LinuxコンテナやWindowsコンテナあり • 様々なインフラやOSで動作

    10 とは
  11. 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. 12 The Twelve-Factor App (2011) Webアプリケーションを使いやすい形でスケーラブルにするための⽅法論 • I. コードベース •

    バージョン管理されている1つのコードベースと複数のデプロイ • II. 依存関係 • 依存関係を明⽰的に宣⾔し分離する • III. 設定 • 設定を環境変数に格納する • IV. バックエンドサービス • バックエンドサービスをアタッチされたリソースとして扱う • V. ビルド、リリース、実⾏ • ビルド、リリース、実⾏の3つのステージを厳密に分離する • VI. プロセス • アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する
  13. 13 • VII. ポートバインディング • ポートバインディングを通してサービスを公開する • VIII. 並⾏性 •

    プロセスモデルによってスケールアウトする • IX. 廃棄容易性 • ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する • X. 開発/本番⼀致 • 開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ • XI. ログ • ログをイベントストリームとして扱う • XII. 管理プロセス • 管理タスクを1回限りのプロセスとして実⾏する The Twelve-Factor App (2011) Webアプリケーションを使いやすい形でスケーラブルにするための⽅法論
  14. 14 なぜDockerを使うのか • リソース集約効率が上がる • 必要な⾔語やライブラリを閉じ込めるため、
 ⼀つのサーバで複数の⾔語やバージョンを稼働させられる • 複数環境載せてもセキュリティ上分離可能(厳密には・・) •

    環境の再現性が⾼い • アプリの実⾏環境構築が容易で、構築⾃体や問題発⽣の再現性が⾼い • ポータビリティ性が⾼い • どの環境でも動かすことが可能で、移⾏や複数環境構築が容易 • ローカルと本番の環境を限りなく合わせることも可能で、開発・テストが容易
  15. 15 Dockerを本番運⽤する上で何が課題になるのか • 複数コンテナの管理 • 本番利⽤するときは1コンテナではなくWeb、App、DBなど複数 コンテナ • 可⽤性 •

    正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、セキュリティ、etc • それらを管理するツールが必要になってきた
  16. 16 オーケストレーションツール

  17. 17 以下の課題を解決 • 複数コンテナの管理 • 本番利⽤するときは1コンテナじゃなく複数コンテナ • Web、App、DBなど種類も複数 • 可⽤性

    • 正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、etc • それらを管理するツールが必要になってきた
  18. 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. 19 オーケストレーションツールの歴史 • 2017 • Fortune 100企業のKubernetesの採⽤率は54%を突破と報道(Redmonk) • DockerがKubernetesの統合を発表 •

    Azure、AWSもKubernetesマネージドサービス提供 • 2018 • Rancher2.0リリース + Kubernetesを標準に
  20. 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. 21 と、⾔われていますが個⼈的には • 設計がイマドキ • ベストプラクティスに添えば、良い設計になる • エコシステムのOSSもセンスが良い • Istio(Envoy)、Kubeflow、Knative、etc

    • マイクロサービスの課題を解決しやすい • UNIXの哲学、The Twelve-Factor App、コンテナデザインパターンを採⽤ • マイクロコンテナになる • マイクロサービス化していく • マイクロサービスの管理⾟い • Istio登場 <<=== イマココ
  22. 22 Kubernetesは完璧か?使いこなすには? • Kubernetesは銀の弾丸ではない • マイクロサービスに耐えうる組織設計と⽂化形成と相性が良い(メルカリさん) • 組織設計 = コンウェイの法則

    • ⽂化形成 = 価値提供の速度向上・⽣産性向上を徹底する⽂化 • ただし、マイクロサービスには課題がある • 分散システムのトレーシング、多数のシステム管理、⼀貫性、テスト、、、 • 完璧ではないけど、徐々に良い⽅向に向かっています • コンウェイの法則 • 組織の設計するシステムは、その組織のコミュニケーション構造をそのまま反映した設計になる
  23. 23

  24. 24

  25. 25

  26. 26 Container as a Service

  27. 27 話を戻して Container as a Service の定義 •IaaS = Infrastructure

    as a Service •PaaS = Platform as a Service •Container as a Service = 
 Container基盤を「サービス」として利⽤する
  28. 28 Container as a Serviceイメージ Container Definition Container Definition 28

    Black box Infra
  29. 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. 30 Fargateは⾼いので ECSにスポットインスタンスを組み合わせた

  31. 31 しかしECSには罠があった • ECSとEC2 (AutoScale)の溝 • ECSのリソース不⾜(ECSイベント)を検知してスケールしてくれない • EC2 AutoScaleはCloudWatchメトリクスベースのスケーリング

    • 余剰リソースが空いてても集約してくれない • コンテナサイズでリソースを確保してくれない • ECSはCPU/MEMの空き容量ベースの確保 • インスタンスのTerminate時に⾃動でコンテナをDrainしてくれない • ⾃分でコンテナをDrainしてからインスタンスをTerminateする必要がある • ホストのBlue / Green Deploymentは⾃分で構築する必要がある (Teraform?CloudFormation?)
  32. 32

  33. 33 それらを解決してくれるのが

  34. 34 ( ElastiGroup )

  35. 35 ( ElastiGroup ECS Integration ) • ECSのリソース不⾜(ECSイベント)を検知して⾃動でスケール • 余剰リソースがギリギリでも⼤丈夫

    • 余剰リソースが空いたら⾃動で集約 • 集約効率がギリギリまで上がる • 必要なコンテナサイズ x 個数でリソースを確保 • 必要なコンテナサイズとCPU/MEMを考慮した空き容量計算が不要に • インスタンスのTerminate時に⾃動でコンテナをDrainする • 気をつける必要がなく安全にインスタンスを停⽌できる • ホストのBlue / Green Deploymentを強制してくれる • 安全に⼊れ替えができる
  36. 36 完成図 Container Definition Container Definition 36

  37. 37 15分で作る⼿順

  38. 38 前提 1. AWSアカウントがある(10分) 2. Spotinstアカウントがある(10分) 1. AWSアカウントを連携している(5分) 2. (14⽇間無料、クレカ不要)

  39. 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. 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. 41 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)

  42. 42 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)

  43. 43 1. ECS Cluster作る、EC2をJoinさせる、ECS Serviceを作る(7分)

  44. 44 2. SpotinstでImportする(2分) C

  45. 45 2. SpotinstでImportする(2分)

  46. 46 2. SpotinstでImportする(2分)

  47. 47 3. EC2がデプロイされるのを待つ(3分)

  48. 48 4. 古いEC2(AutoScalingGroup)を0台にする(1分)

  49. 49 再掲 ( ElastiGroup ECS Integration ) • ECSのリソース不⾜(ECSイベント)を検知して⾃動でスケール •

    余剰リソースがギリギリでも⼤丈夫 • 余剰リソースが空いたら⾃動で集約 • 集約効率がギリギリまで上がる • 必要なコンテナサイズ x 個数でリソースを確保 • 必要なコンテナサイズとCPU/MEMを考慮した空き容量計算が不要に • インスタンスのTerminate時に⾃動でコンテナをDrainする • 気をつける必要がなく安全にインスタンスを停⽌できる • ホストのBlue / Green Deploymentを強制してくれる • 安全に⼊れ替えができる
  50. 50

  51. 51 ECSのリソース不⾜(ECSイベント)を 検知して⾃動でスケール Container Definition Container Definition 51 Black box

    Infra
  52. 52 余剰リソースが空いたら⾃動で集約 Container Definition Container Definition 52 Black box Infra

  53. 53 必要なコンテナサイズ x 個数でリソースを確保 Container Definition Container Definition 53 Black

    box Infra
  54. 54 インスタンスのTerminate時に ⾃動でコンテナをDrainする Container Definition Container Definition 54 Black box

    Infra
  55. 55 Container as a Service With スポットインスタンスの完成

  56. 56 まとめ 1. Dockerとは 2. Dockerオーケストレーションツール云々 3. Container as a

    Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅
  57. 57 ご静聴ありがとうございました