0

コンテナーを実行する AutoScaling グループがあります (ECS を使用)。ASG で EC2 インスタンスを追加または置換すると、必要な Docker イメージがありません。そのため、cloud-init を使用していくつかのdocker pullコマンドを実行し、起動時にイメージをフェッチします。

ただし、ASG は新しいインスタンスの準備ができていると見なし、古いインスタンスを終了します。しかし実際には、すべての Docker イメージがプルされるまで、この新しいインスタンスの準備はできていません。


たとえば、ASG の希望数が 5 で、cloud-init を使用して 5 つのコンテナーをプルする必要があるとします。ここで、ASG 内のすべての EC2 インスタンスを置き換えたいと考えています。

新しいインスタンスが起動し始めると、ASG は古いインスタンスを終了します。ただし、docker pullラグが原因で、デプロイ中に実際の有効なインスタンスが 3 または 2 未満になる時間があります。


cloud-init が終了したときにのみ「インスタンスを準備完了としてマーク」するにはどうすればよいですか?

注: Cloudformation は、CFN-Bootstrap を使用してこの通信ギャップを埋めることができると思います。しかし、私は Cloudformation を使用していません。

4

1 に答える 1

2

あなたが持っているのはAutoScaling Lifecycle Hooksです。docker pull が完了するまで、インスタンスを Pending:Wait 状態のままにしておくことができます。その後、インスタンスを InService に移動できます。これはすべて AWS CLI で実行できるため、docker コマンドの前後に AWS AutoScaling コマンドを使用して実現できるはずです。

私が提供したドキュメントへのリンクは、この機能を詳細に説明し、その使用方法に関する優れた例を提供します.

于 2016-03-23T14:46:05.673 に答える