Для AWS ASG, как настроить пользовательскую проверку готовности для новых экземпляров?
У нас есть группа AutoScaling, которая запускает контейнеры (используя ECS). Когда мы добавляем ИЛИ заменяем экземпляры EC2 в ASG, на них нет нужных нам образов докеров. Итак, мы запускаем несколько docker pull
команды, использующие cloud-init для получения изображений при загрузке.
Однако ASG считает, что новый экземпляр готов, и завершает работу старого. Но на самом деле этот новый экземпляр не готов, пока не будут извлечены все образы докеров.
Например, предположим, что желаемый счетчик моей ASG равен 5, и мне нужно вытащить 5 контейнеров, используя cloud-init. Теперь я хочу заменить все экземпляры EC2 в моей ASG.
Когда новые экземпляры начнут загружаться, ASG прекратит работу старых экземпляров. Но из-за docker pull
Во время развертывания будет время, когда фактические действительные экземпляры будут меньше 3 или 2.
Как я могу "пометить экземпляр как готовый", только когда завершение cloud-init?
Примечание: я думаю, что Cloudformation может восполнить этот пробел в коммуникации, используя CFN-Bootstrap. Но я не использую Cloudformation.
1 ответ
То, что вы выглядите, это AutoScaling Lifecycle Hooks. Вы можете сохранить экземпляр в состоянии Pending: Подождите, пока завершится извлечение докера. Затем вы можете переместить экземпляр в InService. все это можно сделать с помощью интерфейса командной строки AWS, поэтому его можно реализовать с помощью команды автоматического масштабирования AWS до и после команд докера.
Ссылка на предоставленную мною документацию подробно объясняет эту функцию и предоставляет отличные примеры того, как ее использовать.