このツールを最小限の数のノードから開始し、必要なときに最大数のノードに拡張するように設定する方法を知りたいと思います。docker swarmで自動拡大を設定するにはどうすればいいですか?
私は別のツールを使用するか、ドッカーがこれを解決できますか?
このツールを最小限の数のノードから開始し、必要なときに最大数のノードに拡張するように設定する方法を知りたいと思います。docker swarmで自動拡大を設定するにはどうすればいいですか?
私は別のツールを使用するか、ドッカーがこれを解決できますか?
短い回答:Docker Swarmでこれを簡単に行う方法はありません。
Docker Swarm(またはSwarmモード)は、自動スケーリングマシンをそのまま使用することはできません。 docker-machine
のようなものに対しては、インフラストラクチャにマシンを作成して(ドッカー付き)、既存のSwarmクラスタ(docker swarm join
)にリンクする必要があります。
これは、スクリプトの多くを含むことになるが、アイデアは(top
またはmonit
付き)CPU /メモリ/ネットワークを使用するため、クラスタを監視することであり、それは、閾値を超えたら(たとえば70%、総クラスタリソースの) docker-machine
を呼び出すスクリプトをトリガしてクラスタを拡大します。同じアイデアを使用して、の排水とを、下位しきい値を下回ったら既存の集団クラスタからノード(好ましくはAgent
個のノード)を削除して縮小することもできます。
この基準を使用する場合は、持続的なリソース使用を監視している必要があります。そうしないと、リソースの頻繁かつ突然の変更からノードが生成され、破棄されます。
クラスタ内のマシンの下限と上限を定義して、物事を制御し続けることができます。
Distributed Consensusアルゴリズムの定足数を維持するには、Swarmに少なくとも3つのManager
ノード(推奨5)が必要であることに注意してください。したがって、の最小推奨下限は5ノードです(これはサービスによってリソースが徐々に使用されるため、Agent
ノードで拡張できます)。
ある程度まで、あなたはまた、インフラストラクチャ自動化とヘルスモニタリングためDocker InfraKitまたはTerraformを見てみることができます。
更新:Orbiter:スウォームモードタスクの自動スケーリングをサポートして有望なクロスプラットフォームautoscalerが用意されました。まだサービス/マシン自動スケーリングのためのすぐれたものはありません。
ありがとう@abronan!私が理解しているように、ノードは外部ツールでのみスケーラブルにすることができます。コンテナはどうですか?容器をオートスケールすることは可能でしょうか?または、私はkubernetesのような別のツールを使用する必要がありますか? –
@CelsoAgra AFAIK、 'docker service scale'コマンド(またはその' docker-compose'コマンド)がありますが、例えば着信要求やCPU使用量の統計情報を使ってスケーリングをトリガーする必要もあります。 Kubernetesはリソース使用量に基づいて実際に[pod autoscaler](https://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/)を持っていますので、これはあなたのユースケースに合っています:) – abronan
@abronan(または誰でも) Dockerコミュニティに、Dockerロードマップで計画されている組み込みの自動スケーラがあるかどうか知っていますか? Dockerがこの権利を箱から取り除くことができれば、これは大きく利用される機能だと思う... – smeeb
this issue on GitHubによれば、現時点ではオートスケーリングはサポートされていません。議論の参加者の1人は、次のことを示しました:
今日は利用できません。 SwarmはDocker-Composeを使用して静的に拡大縮小します。 自動スケーリングを実行するには、CPU/QPSモニタリングが必要です。スワムにはまだ がありません。
この機能が実装されるように、この質問にリンクできる現在のチケットがあるかどうか質問されました。
スケーリングはかなり簡単です。必要に応じてコンテナのスケジューリングを続けることができます。次に、保留中のコンテナを検索し、クラスタを拡大するスクリプトを作成するだけです。たとえば、swarmの公式CloudFormationテンプレートをaws上で使用している場合は、オートスケーリンググループで目的の番号を変更するだけです。
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
[公式スウォームレポ](https://github.com/docker/swarmkit/issues/1663)で提案/機能のリクエストによると、[dockercloud:例の繰り返しスクリプトができたが、このようになります。 -haproxy](https://github.com/docker/dockercloud-haproxy#running-with-docker-swarmmode-swarm-mode)ツールは、すぐにSwarmと動作するように見えますが、私は確認していません。 – smeeb
@smeebはそのツールにオートスケーリング機能を搭載していますか? – 030
dockercloud-haproxyは、既存のコンテナに沿ってリクエストを配信しますが、自動スケーリングには役立ちません。 – raarts