このツールを構成して、最小数のノードから開始し、必要に応じて最大数のノードに拡大する方法を知りたいと思います。
別のツールを使用する必要がありますか、Docker Swarmでこれを解決できますか?
短い答え:現時点では、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 または Terraform でInfrastructure automationおよびHealth monitoringを確認することもできます。
Update:Swarm Modeをサポートする有望なクロスプラットフォームオートスケーラーがありますtask auto-scaling: Orbiter 。サービス/マシンの自動スケーリングについては、すぐに使えるものはまだありませんが。
スケールアップは非常に簡単です。必要に応じてコンテナのスケジューリングを続けることができます。次に、保留中のコンテナを探してクラスターを拡大するスクリプトを作成します。たとえば、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
GitHubのこの問題 によると、現時点では自動スケーリングはサポートされていません。ディスカッションの参加者の1人は次のことを示しました。
今日は利用できません。 SwarmはDocker-Composeを使用して静的にスケーリングします。自動スケーリングを行うには、CPU/QPS監視が必要です。 Swarmにはまだありません。
この機能に実装できるように、この質問にリンクできる現在のチケットがあるかどうかが質問されています。