web-dev-qa-db-ja.com

Docker Swarmで自動スケーリングを設定する方法は?

このツールを構成して、最小数のノードから開始し、必要に応じて最大数のノードに拡大する方法を知りたいと思います。

別のツールを使用する必要がありますか、Docker Swarmでこれを解決できますか?

33
Celso Agra

短い答え:現時点では、Docker Swarmでこれを行う簡単な方法はありません。

Docker Swarm(またはSwarmモード)は、すぐに使用できる自動スケーリングマシンをサポートしません。 docker-machineなどの別のソリューションを使用して、インフラストラクチャ上にマシンを作成し(Dockerを使用)、既存のSwarmクラスターにリンクする必要があります(docker swarm joinを使用)。

これには多くのスクリプティングが含まれますが、CPU /メモリ/ネットワークの使用状況(topまたはmonitを使用)についてクラスターを監視し、しきい値を超えると(たとえば70%クラスターリソースの合計)、docker-machineを呼び出すスクリプトをトリガーしてクラスターをスケールアップします。同じアイデアを使用して、drainingおよびremovingノード(できればAgentノード)でスケールダウンすることもできます下限しきい値を下回ると、既存のSwarmクラスター。

この基準を使用する場合は、持続的なリソース使用量を監視していることを確認する必要があります。そうしないと、リソース使用量の頻繁かつ突然の変化からインフラストラクチャがノードを生成および破棄します。

クラスター内のマシンの下限と上限を定義して、管理下に置くことができます。

分散コンセンサスアルゴリズムのクォーラムを維持するには、Swarmに少なくとも3つのManagerノード(推奨5)が必要であることに注意してください。そのため、推奨される最小の下限は5ノードです(リソースがサービスによって増分的に使用されているため、Agentノードで拡張できます)。

ある程度、 Docker InfraKit または TerraformInfrastructure automationおよびHealth monitoringを確認することもできます。

Update:Swarm Modeをサポートする有望なクロスプラットフォームオートスケーラーがありますtask auto-scalingOrbiter 。サービス/マシンの自動スケーリングについては、すぐに使えるものはまだありませんが。

36
abronan

スケールアップは非常に簡単です。必要に応じてコンテナのスケジューリングを続けることができます。次に、保留中のコンテナを探してクラスターを拡大するスクリプトを作成します。たとえば、swarmのawsで公式のCloudFormationテンプレートを使用している場合は、自動スケーリンググループの目的の数を変更するだけです。反復スクリプトの例は次のようになります。

services=$(docker service ls --format '{{.ID}}')
for service in $services; do
  tasks=$(docker service ps $service --format '{{.ID}}')
  for task in $tasks; do
    if docker inspect $task --format '{{.Status}}' | grep 'insufficient resources' 1>/dev/null; then
      scale-up-cmd
    fi
  done
done
1
user2658308

GitHubのこの問題 によると、現時点では自動スケーリングはサポートされていません。ディスカッションの参加者の1人は次のことを示しました。

今日は利用できません。 SwarmはDocker-Composeを使用して静的にスケーリングします。自動スケーリングを行うには、CPU/QPS監視が必要です。 Swarmにはまだありません。

この機能に実装できるように、この質問にリンクできる現在のチケットがあるかどうかが質問されています。

0
030