(非推奨) Marathon REST API を使用した DC/OS コンテナー管理
警告
Azure Container Service (ACS) は非推奨となっています。 ACS に新しい機能が追加されることはありません。 API、ポータルのエクスペリエンス、CLI コマンド、ドキュメントはすべて非推奨としてマークされます。
詳細については、Azure.com で Azure Container Service の非推奨化に関するお知らせを参照してください。
次のいずれかの Azure Marketplace ソリューションをデプロイすることをお勧めします。
- Mesosphere DC/OS
Kubernetes を使用する場合は、Azure Kubernetes Service に関するページを参照してください。
DC/OS はクラスター化されたワークロードをデプロイし、スケールするための環境を提供すると共に、基礎となるハードウェアを抽象化します。 DC/OS に加え、コンピューティング ワークロードのスケジュールと実行を管理するフレームワークもあります。 一般的な各種ワークロードに対応したフレームワークはいくつかありますが、このドキュメントでは、Marathon REST API を使用してコンテナーのデプロイを作成し、スケールする方法について説明します。
前提条件
これらの例を見ていく前に、Azure コンテナー サービスで構成された DC/OS クラスターが必要です。 また、このクラスターへのリモート接続も必要です。 これらの項目の詳細については、次の記事を参照してください。
DC/OS API にアクセスする
Azure Container Service クラスターに接続したら、DC/OS と関連する REST API に http://localhost:local-port. このドキュメントの例では、ポート 80 にトンネリングしていることを前提としています。 たとえば、Marathon エンドポイントは、次で始まる URI で到達できます。 http://localhost/marathon/v2/.
さまざまな API の詳細については、Marathon API と Chronos API に関する Mesosphere ドキュメントと Mesos Scheduler API に関する Apache ドキュメントを参照してください。
DC/OS と Marathon から情報を収集する
DC/OS クラスターにコンテナーをデプロイする前に、DC/OS エージェントの名前や状態など、DC/OS クラスターに関する情報を収集します。 DC/OS REST API の master/slaves
エンドポイントに情報を照会してください。 問題がなければ、DC/OS エージェントの一覧と各エージェントのプロパティが返されます。
curl https://localhost/mesos/master/slaves
次に、Marathon /apps
エンドポイントを利用し、DC/OS クラスターに対する現在のアプリケーション デプロイを確認します。 これが新しいクラスターであれば、アプリ用の空の配列が表示されます。
curl localhost/marathon/v2/apps
{"apps":[]}
Docker 形式のコンテナーのデプロイ
Docker 形式のコンテナーは、対象のデプロイについて記述された JSON ファイルを利用して、Marathon REST API 経由でデプロイします。 次の例では、クラスター内のプライベート エージェントに Nginx コンテナーがデプロイされます。
{
"id": "nginx",
"cpus": 0.1,
"mem": 32.0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
]
}
}
}
Docker 形式のコンテナーをデプロイするには、アクセスできる場所に JSON ファイルを保存します。 次に、コンテナーをデプロイするために、次のコマンドを実行します。 JSON ファイルの名前を指定します (この例では marathon.json
)。
curl -X POST https://localhost/marathon/v2/apps -d @marathon.json -H "Content-type: application/json"
次のように出力されます。
{"version":"2015-11-20T18:59:00.494Z","deploymentId":"b12f8a73-f56a-4eb1-9375-4ac026d6cdec"}
ここで、アプリケーションについて Marathon にクエリを実行すると、この新しいアプリケーションが出力に表示されます。
curl localhost/marathon/v2/apps
コンテナーへの到達
クラスター内のプライベート エージェントのいずれかのコンテナーで Nginx が稼働していることを確認できます。 コンテナーを実行しているホストとポートを確認するには、実行中のタスクの Marathon に対してクエリを実行します。
curl localhost/marathon/v2/tasks
出力で host
の値 (10.32.0.x
と同様の IP アドレス) と ports
の値を調べます。
次に、クラスターの管理 FQDN への SSH ターミナル接続 (トンネル接続ではなく) を行います。 接続後は、次の要求を行って、host
と ports
の正しい値を代入します。
curl http://host:ports
Nginx サーバーの出力は、次のようになります。
コンテナーのスケール
Marathon API を利用して、アプリケーションのデプロイをスケールアウトまたはスケールインすることができます。 前の例では、アプリケーションの 1 つのインスタンスをデプロイしました。 それをアプリケーションの 3 つのインスタンスにスケールアウトしてみましょう。 これを行うには、次の JSON テキストを使って JSON ファイルを作成し、それをアクセス可能な場所に保存します。
{ "instances": 3 }
トンネル接続から次のコマンドを実行して、アプリケーションをスケールアウトします。
注意
URI は、http://localhost/marathon/v2/apps/ に、スケールするアプリケーションの ID が追加されたものになります。 ここで提供されている Nginx サンプルを使用している場合、URI は http://localhost/marathon/v2/apps/nginx.
curl https://localhost/marathon/v2/apps/nginx -H "Content-type: application/json" -X PUT -d @scale.json
最後に、Marathon エンドポイントに対してアプリケーションを照会します。 現在、3 つの Nginx コンテナーがあることがわかります。
curl localhost/marathon/v2/apps
同等の PowerShell コマンド
これと同じ操作は、Windows システム上で PowerShell コマンドを使って実行できます。
エージェント名やエージェントの状態など、DC/OS クラスターに関する情報を収集するには、次のコマンドを実行します。
Invoke-WebRequest -Uri https://localhost/mesos/master/slaves
Docker 形式のコンテナーは、意図するデプロイについて記述した JSON ファイルを利用して、Marathon 経由でデプロイします。 次のサンプルでは、Nginx コンテナーがデプロイされます。併せて、DC/OS エージェントのポート 80 がコンテナーのポート 80 に関連付けられます。
{
"id": "nginx",
"cpus": 0.1,
"mem": 32.0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
]
}
}
}
Docker 形式のコンテナーをデプロイするには、アクセスできる場所に JSON ファイルを保存します。 次に、コンテナーをデプロイするために、次のコマンドを実行します。 JSON ファイル (この例では marathon.json
) にパスを指定します。
Invoke-WebRequest -Method Post -Uri https://localhost/marathon/v2/apps -ContentType application/json -InFile 'c:\marathon.json'
Marathon API を利用して、アプリケーションのデプロイをスケールアウトまたはスケールインすることもできます。 前の例では、アプリケーションの 1 つのインスタンスをデプロイしました。 それをアプリケーションの 3 つのインスタンスにスケールアウトしてみましょう。 これを行うには、次の JSON テキストを使って JSON ファイルを作成し、それをアクセス可能な場所に保存します。
{ "instances": 3 }
次のコマンドを実行してアプリケーションをスケールアウトします。
注意
URI は、http://localhost/marathon/v2/apps/ に、スケールするアプリケーションの ID が追加されたものになります。 ここで提供されている Nginx サンプルを使用している場合、URI は http://localhost/marathon/v2/apps/nginx.
Invoke-WebRequest -Method Put -Uri https://localhost/marathon/v2/apps/nginx -ContentType application/json -InFile 'c:\scale.json'