Upgrade to Pro — share decks privately, control downloads, hide ads and more …

jaws-ug Kyoto 20181026 Container-as-a-Service w...

shogomuranushi
October 26, 2018
250

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

shogomuranushi

October 26, 2018
Tweet

More Decks by shogomuranushi

Transcript

  1. 2

  2. 3

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

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

    Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅
  5. 8

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

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

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

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

    正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、セキュリティ、etc • それらを管理するツールが必要になってきた
  11. 17 以下の課題を解決 • 複数コンテナの管理 • 本番利⽤するときは1コンテナじゃなく複数コンテナ • Web、App、DBなど種類も複数 • 可⽤性

    • 正しく稼働していること、⾃動でリカバリすること • オートスケール • 負荷に応じて⾃動でスケールすること • モニタリング、etc • それらを管理するツールが必要になってきた
  12. 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リリース
  13. 20 なぜKubernetesがデファクトスタンダードになったのか • 定期的なメジャーアップデート • 3ヶ⽉ごとにアップデートを繰り返し、エンタープライズからのフィードバックも反 映。本番稼働に耐えうるソフトウェアとして信頼を得た。 •        によるエコシステムの拡⼤ •

    Kubernetesの成⻑と共にCNCFに各⼤⼿企業が参加 • Alibaba、AWS、Google、IBM、Microsoft、Oracle、Redhat、VMware、etc • 様々な良質なOSSがCNCFのエコシステムに • Prometheus、Fluentd、GRPC、containerd、cni、envoy、helm、etc • その他の要素含め、これらにより企業と開発者が集まるサイクルができて、圧倒的な速度 で成⻑を遂げた
  14. 21 と、⾔われていますが個⼈的には • 設計がイマドキ • ベストプラクティスに添えば、良い設計になる • エコシステムのOSSもセンスが良い • Istio(Envoy)、Kubeflow、Knative、etc

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

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

  17. 24

  18. 25

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

    as a Service •PaaS = Platform as a Service •Container as a Service = 
 Container基盤を「サービス」として利⽤する
  20. 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はブログを参照ください
  21. 31 しかしECSには罠があった • ECSとEC2 (AutoScale)の溝 • ECSのリソース不⾜(ECSイベント)を検知してスケールしてくれない • EC2 AutoScaleはCloudWatchメトリクスベースのスケーリング

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

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

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

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

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

    Serviceって 4. スポットインスタンス?Spotinstについて 5. 15分での作り⽅