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

AWS Container Orchestration 101

Bf5ee9059859ed5d855b5ff4680e63e2?s=47 track3jyo-hama
PRO
June 18, 2020
230

AWS Container Orchestration 101

Bf5ee9059859ed5d855b5ff4680e63e2?s=128

track3jyo-hama
PRO

June 18, 2020
Tweet

Transcript

  1. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Container Orchestration 101 Shinichi Hama Solutions Architect Amazon Web Services Japan Jun 18, 2020
  2. © 2020, Amazon Web Services, Inc. or its Affiliates. 自己紹介

    Shinichi Hama Twitter/@track3jyo Solutions Architect Amazon Web Service Japan 西日本のお客様の支援 & Container のあれこれ <好きなAWSサービス> Amazon ECS Amazon EKS AWS Fargate Amazon DynamoDB
  3. © 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ

    • Why Container? • Container Orchestration • Amazon ECS & Amazon EKS(Kubernetes)
  4. © 2020, Amazon Web Services, Inc. or its Affiliates. Why

    Container?
  5. © 2019, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Why containers? • Run Anywhere • Portability • Isolated processes
  6. © 2019, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Why containers? • Run Anywhere • Portability • Isolated processes → CI/CD による⾃動化、デリバリ速度の向上 → リソース集積率を⾼めることによる仮想マシ ンコストの削減 といったメリットが⾒込める
  7. © 2020, Amazon Web Services, Inc. or its Affiliates. Docker

    Docker 社が開発 Apache 2.0 ライセンス 2013年3⽉ OSS リリース 常駐型コンテナ実⾏エンジン コンテナのライフサイクル管理・デプロイツール
  8. © 2020, Amazon Web Services, Inc. or its Affiliates. 仮想マシンとコンテナ

  9. © 2020, Amazon Web Services, Inc. or its Affiliates. Docker

    を利⽤した基本的ワークフロー - コンテナイメージ作成 -
  10. © 2020, Amazon Web Services, Inc. or its Affiliates. Docker

    を利⽤した基本的ワークフロー - コンテナ実⾏ -
  11. © 2020, Amazon Web Services, Inc. or its Affiliates. 思っていたよりも⼿作業︖

    • Docker の責務は同⼀サーバ上のコンテナライフサイクル管理 • 複数サーバやコンテナを束ねた概念に対するオペレーションはスコー プ外
  12. © 2020, Amazon Web Services, Inc. or its Affiliates. Container

    Orchestration
  13. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションがない世界

    $ ssh … イメージレジストリ Docker Engine EC2 インスタンス # docker run ... コンテナ イメージのダウンロード コンテナ イメージ
  14. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションがある世界

    API イメージレジストリ Docker Engine EC2 インスタンス コンテナ イメージのダウンロード コンテナ イメージ Orchestrator Agent API (docker run …)
  15. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの世界

    API Docker Engine Orchestrator Agent Docker Engine Agent Docker Engine Agent Docker Engine Agent クラスタ
  16. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ エージェントは⾃⾝が所属する 仮想マシン内の情報を継続的に オーケストレータへ報告 - 同仮想マシン内で実⾏中の コンテナ - 同仮想マシン内の空きリ ソース(e.g. CPU, メモリ) - etc.
  17. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ オーケストレータはクラスタ内 のエージェント群から受け取っ た情報を元にクラスタ全体の状 態を把握
  18. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ ユーザーはオーケストレータの API を呼ぶ際に以下のような情 報を合わせて指定する - 実⾏するコンテナイメージ - そのコンテナが必要とする CPU/メモリリソース量 - etc.
  19. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ オーケストレータはユーザーか らの API 呼び出しを受けるとク ラスタ内の空きがある仮想マシ ンを⾒つけ、同マシン上でのコ ンテナ実⾏を予約する = スケジューリング
  20. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ エージェントは⾃⾝の所属する 仮想マシンでの実⾏が予約され たコンテナ情報を受け取ると、 Docker Engine に対して docker run コマンドを発⾏し、コンテ ナを実⾏する
  21. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションの仕組み

    API Docker Engine Orchestrator Agent Docker Engine Agent ・・・ エージェントは⾃⾝の所属する 仮想マシンでの実⾏が予約され たコンテナ情報を受け取ると、 Docker Engine に対して docker run コマンドを発⾏し、コンテ ナを実⾏する この一連の流れが 「宣言的デプロイメント」
  22. © 2020, Amazon Web Services, Inc. or its Affiliates. 宣言的デプロイメントのワークフロー

    1. ユーザーはオーケストレータに対して「望ましい状態」を宣言 § 望ましい状態 = 指定コンテナが指定リソースの割り当てを受けて実行 されている状態 2. オーケストレータはクラスタ内のコンテナ実行状況を常にユーザーが宣 言した状態に収束させようとする 3. ユーザーの宣言内容が変更されると、オーケストレータはクラスタ内の コンテナ実行状況がその宣言状態に収束するようにクラスタ内のコンテ ナの停止や起動をスケジュール (= 新バージョンのデプロイ) 4. スケジュールを検知したエージェントがコンテナの停止や起動を実施
  23. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションのControl

    Loop Observe Check Defferences Take Action API Server(Control Planeのインターフェー ス)に問い合わせ あるべき姿と突き合わせ 差分があれば埋める
  24. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションツールの紹介

    Amazon Elastic Container Service Docker Swarm
  25. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    ECS & Amazon EKS(Kubernetes)
  26. © 2020, Amazon Web Services, Inc. or its Affiliates.

  27. © 2020, Amazon Web Services, Inc. or its Affiliates. AWSのコンテナ関連サービス

    Amazon Elastic Container Service Amazon Elastic Kubernetes Service Amazon EC2 AWS Fargate Amazon Elastic Container Registry オーケストレーション デプロイ、スケジューリング、 スケーリング、クラスタ管理 実行環境 コンテナが実行される場所 イメージレジストリ コンテナイメージのレポジトリ
  28. © 2020, Amazon Web Services, Inc. or its Affiliates. We

    Give You The Power To Choose: ECS EKS EC2 Fargate EC2 Fargate 1. Choose your orchestration tool 2. Choose your launch type
  29. © 2020, Amazon Web Services, Inc. or its Affiliates. AWSコンテナサービスを数字で見る

    https://aws.amazon.com/jp/containers/ 80% クラウドのすべてのコンテナ化され た実⾏中のアプリケーションのうち AWS で実⾏されている割合 150% AWS コンテナサービスの 前年比の成長 10倍 1 年間の EKS 使⽤量の増加 3倍 1 年間の Fargate 使⽤量の増加 毎週 1 億タスクを実⾏ 20億回以上 ECR を使⽤した毎週の Image Pull
  30. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    Elastic Container Service
  31. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Elastic Container Service (ECS) • クラウドでコンテナを本番環境利⽤す るためのオーケストレーター • 各種 AWS サービスとの⾼度な連携 • 多様なワークロードをサポートする 「タスク」「サービス」というシンプ ルなリソース表現 • Linux/Windows サポート https://aws.amazon.com/jp/ecs/ サービス紹介ページ Amazon ECS
  32. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon ECSの主要要素 コンテナ イメージ コンテナ イメージ 参照 タスクを構成するコンテナ群定義︓ • コンテナ定義(イメージ場所等) • 要求CPU & メモリ • タスクに割当てるIAMロール • ネットワークモード • etc... タスク定義 クラスター • 実⾏環境の境界 • IAM権限の境界(クラスタに対する操作) • スケジュールされたタスクの実⾏を設定可能 サービス • タスク実⾏コピー数(n個)を定義 • 起動後、タスク実⾏コピー数を維持 • ELBと連携 • 起動タイプ(EC2, Fargate)を設定 参照 タスク • タスク定義に基づき起動され るコンテナ群 • Task内コンテナは 同⼀ホスト上で実⾏される
  33. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon ECS の各種AWSサービスのIntegration • ロードバランシング︓Elastic Load Balancing • 設定情報管理︓AWS SSM Parameter Store 、 Amazon S3 • 秘密情報管理︓AWS Secrets Manager • サービスディスカバリ︓AWS Cloud Map • バッチジョブ︓EventBridge 、Step Functions • 認証認可︓IAM • モニタリング、ロギング︓CloudWatch 、X-Ray • NFS︓EFS • CI/CD︓Code シリーズ
  34. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. • たくさんのお客様がEC2上にセルフマネージドなKubernetesを動かしていた • Kubernetesの周りにあるOSSのエコシステムやその拡張性の⾼さを望まれていた
  35. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Elastic Kubernetes Service
  36. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon EKS, Kubernetes • 運⽤難易度の⾼い Kubernetes マスターをマネージドで提供 • エコシステムの OSS やツールを利⽤で きる, CNCF certified • EKS サービスチーム、OSS チームによ る Kubernetes コミュニティへの貢献 • オープンソース • “Pod”, ”Deployment”, “Service”, “Job” などのリソースに代表される⾼い表現⼒
  37. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Kubernetes control plane をマネージドサービスとして提供 kubectl コマンド Client コントロールプレーン データプレーン Worker Node Worker Node Worker Node Amazon EKS Kubernetes API Server
  38. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. 多種多様な OSS との連携 各種コミュニティにより開発された多種多様なエコシステムとの連携 • Kubernetes のパッケージマネージャ • 各 OSS のインストールやパッケージの展開が可能 Prometheus モニタリング CI/CD サービスメッシュ ネットワーキング CNI CoreDNS
  39. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Kubernetes のバージョンポリシーについて コントロールプレーン • 約3ヶ⽉に⼀度 コントロールプレーンのマイナーバージョンがリリース • それぞれのバージョンは約9ヶ⽉間メンテナンスされる Ø Kubernetes ポリシーでは最新 3 マイナーバージョン以内に保つ必要がある データプレーン • ワーカーノード (kubelet) のバージョンは、コントロールプレーンのバージョン を超えず、かつ2つ古いマイナーバージョンまでである必要がある 定期的なバージョンアップ対応、CHANGELOG からバージョンアップの影響を 調査、検証できる専⾨のメンバーが複数名いることが望ましい https://kubernetes.io/ja/docs/setup/release/version-skew-policy/ ◼Kubernetesバージョンとバージョンスキューサポートポリシー
  40. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. EKSのバージョンの考え⽅ • Kubernetes プロジェクト同様、⼀時点で3つのバージョンをサポート • EKS チームによるテスト通過後に最新のコントロールプレーンのバージョンが⼀般利⽤ 可能になるため、EKS のバージョンは Kubernetes の latest から behind する • 対象のバージョンが使⽤できなくなる場合は最低 2ヶ⽉前までに AWS よりアナウンス • サポート終了⽇を迎えると⼀定期間の間に⾃動的にアップデートされる(※ ワーカーノー ドは⼿動でアップデートする必要あり) • 1.13 • 1.14 • 1.15 • 1.16 • 1.17 • 1.18 <-- Kubernetes の latest version EKS がサポートしている version(1.13は2020/06にDeprecated) ※ 2020/5/01 現在 Kubernetes と EKS の最新バージョン差異の例
  41. © 2020, Amazon Web Services, Inc. or its Affiliates. 周辺を支えるサービス群

    Amazon EC2 Source Build/Test Deploy AWS CodeCommit AWS CodeBuild Amazon Aurora Amazon S3 Developer Control plane Data plane Backing service Registry CI/CD pipeline AWS CodePipeline AWS CodeDeploy AWS Secrets Manager Parameter Store Secrets/Configs
  42. © 2020, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. コンテナ関連サービスの公開ロードマップ https://github.com/aws/containers-roadmap
  43. © 2020, Amazon Web Services, Inc. or its Affiliates. Thank

    you !! Shinichi Hama track3jyo