AWSのDocker管理サービス、Amazon EC2 Container Serviceの概要と使い方:Docker運用管理製品/サービス大全(5)(4/4 ページ)
数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する特集。今回は、AWSが提供するECSの概要や主な機能、環境構築方法、オーケストレーション設定やスケーリングを行う手順など使い方などについて。
ECSでスケーリングを行う手順
ここからは、ECSでのコンテナー数のスケーリングを行う手順を解説します。
手動によるTask数の増減の検証
ECSはClusterを作成するときにELB、Container instance(EC2インスタンス)、Task(コンテナー)を作成します。しかし、ECSではServiceでELBとコンテナーを制御し、Auto ScalingでContainer instanceを制御する仕組みになっています。そのため、Task数を増減させる場合は手動でClusterとAuto Scalingの設定を変更する必要があります。
Task数の増加は下記の手順で行います。
まずは、Auto Scalingの設定でインスタンス数を増加させContainer instanceを増加させます。
次に、Container instanceが増えたことを確認し、最後にClusterのServiceのUpdateを行いTask数を増加します。
Task数の減少は下記の手順で行います。
- ClusterのServiceのUpdateを行いTask数を減少させる
- Auto Scalingのインスタンス数を減少させる
- Container instance(EC2インスタンス)が減ったことを確認する
- 062#
ECSのリソース管理とスケーリングの自動化
ECSではServiceでELBとコンテナーを制御し、Auto ScalingでContainer instanceを制御する仕組みになっています。そして、ECSではContainer instance上で動作できるTask(コンテナー)数を「CPU Unit」「Memory」のリソースで管理しています(正確には上記に加えポートが使用可能かでも判定されます)。
そして、この利用可能な「CPU Unit」「Memory」リソースはカスタムメトリクスを使うことによってCloud Watchで監視することができます。そのため、上記のリソースをAuto Scalingのトリガーとして使用することでスケーリングの自動化を行うことができます。
これは「ユーザーはTaskの増減を自由に行い、それに合わせてContainer instanceの数をスケーリングさせる」方法です。
t2.microのContainer instanceは生成時に利用可能なリソースとしてCPU Unit:1024/Memory:1024を持ちます。そして、Task DefinitionからTask(コンテナー)が作成され、Container instanceに割り当てられると、利用可能なCPU Unit/MemoryがContainer instanceから減っていきます。
Container instanceが利用可能なCPU Unit/MemoryはECSのコンソールから確認でき、さらにこの値はカスタムメトリクスに設定することにより、Cloud Watchからも監視できます。
ここからは、下記リストのCPU Unitのリソースを例に採り、スケーリングを説明します。
- Container instance
- Container instanceの総利用可能なCPU Unit:1024
- Task Definition
- HTTPD:CPU Unit 256
- Postgres:CPU Unit 512
- Redies:CPU Unit 128
- Databook:CPU Unit 256
- スケーリングポリシー
- 「利用可能なCPU Unit < 200」の場合にスケールアウト
まずは、ECSを利用してHTTPDとPostgressのコンテナーを持ったContainer instance環境を作成します。
次に、自動で作成されたAuto Scalingにはスケーリングポリシーがないため、上記のスケーリングポリシーを設定します。
続いて、別途カスタムメトリクス実行用のEC2を作成し、監視するための取得を行うスクリプトをcronを設定、実行しCPU Unitの値をCloud Watchに送信します。
そして、Container instanceに新しくRedisのコンテナーを追加します。
この場合はContainer instanceにコンテナーを載せるスペースが少なくなったため、スケーリングポリシーにより新しくContainer instanceを作成します。
さらに、DatabookコンテナーをClusterに追加します。この場合は新しく作成されたContainer instanceに配備されます。
このように、ServiceのSchedulerは下記の機能を持っています。
- 追加されたTaskをリソースが空いているContainer instanceに配備する
- クラスター構成の場合は複数のContainer instanceにコンテナーを作成し、そのContainer instanceをELBに設定する
ただし、Container instance内の最適化は行われないため、上記のようにDatabookコンテナーをClusterに追加した後に、CPU Unit:800のコンテナーを追加しようとすると、「リソースがありません」といったメッセージが出力され、追加することができません。
また、コンテナー内のリソース情報はAWS CLIでは取得できないため、こちらをスケーリングのトリガーにすることはできません。
次回は、AWSの「Elastic Beanstalk」について
次回は、AWSが提供するPaaS「AWS Elastic Beanstalk」のDocker管理サービスとしての側面について解説します。
筆者紹介
長妻賢
NTTデータで基盤系技術者として各種開発に従事。運用管理製品Hinemosをクラウドに対応させるべく開発をしつつ、AWSにおける運用を議論するコミュニティ「OpsJAWS」の立ち上げに携わるなどしている。
澤井健
富山県出身。NTTデータに入社後、PostgresForestやHinemosの開発、保守、導入支援に携わり、今はHinemosのクラウドへの普及展開を進めている。休日は仕事を離れ、宝塚観劇のため日比谷や兵庫に訪れるなど趣味を満喫している。
- 執筆履歴
Software Design plusシリーズ『Hinemos 統合管理[実践]入門』(共著:技術評論社)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門
2014年から急速に注目度が増しているコンテナー型仮想化技術「Docker」。すでに多くのLinuxで利用可能な技術ですが、次期Windows Serverでもサポートされる予定です。Dockerとはどのようなものなのか、一度、実際に触って体験してみてはいかがでしょうか。 - Linux/OSSに不慣れでも大丈夫! WindowsでDockerを扱う際のポイント
本連載第31回は「Azureで始めるDocker入門」を掲載しました。掲載後、すぐに「Docker 1.6」がリリースされたので、意図したわけではありませんが、タイムリーな記事になったと思います。今回は、その記事でも紹介した「Docker Client for Windows」をフォローアップします。 - Docker代替のコンテナーランタイム「Rocket」をCoreOSが公開
CoreOSがDocker代替のシンプルなコンテナーランタイムを公開。Dockerの当初の目的であるシンプルなコンテナーを目指すプロトタイプだ。 - Docker、そしてCloud FoundryとPaaSの価値とは
Docker人気を踏まえたとき、Cloud Foundryはどのように位置付けられるのか。PaaSの最終的な価値とは何なのか。AWSとの競合とは。Cloud Foundryの責任者である米PivotalのJames Watters氏に聞いた。 - レッドハットが発表したOpenShift Enterprise 3は「Dockerを知らなくても使える」基盤
レッドハットが2015年7月22日に国内発表したPaaS製品「OpenShift Enterprise 3」の最大の狙いは、Dockerを知らなくてもアプリケーションの開発・運用ができるようにすることだという。ここでは、レッドハットの日本法人の説明に基づき、OpenShift Enterprise 3を紹介する。 - 米グーグルのDockerコンテナ管理サービスが一般提供開始
米グーグルがGoogle Cloud Platform上で提供しているDockerコンテナオーケストレーション/管理サービス、Google Container Engineが2015年8月26日、ベータ段階を終了、一般提供が開始された。毎週20億以上のコンテナを立ち上げているグーグルの経験に基づくサービスだとしている。