根据应用的版本变更,Launch template
随时可能发生变化,例如更换新的AMI、更新userdata等。如果ASG已经根据Launch Template
创建了一堆机器,此时需要将这些机器更新,全部替换成新版本的Launch Template
ASG有instance refresh
功能,当创建好新版本的launch template
后,启动一个instance refresh
,这样会立即更新ASG。在更新ASG时,会采取滚动更新的方式——先将一批机器终止,再启动新版本的机器,当这些新版本的机器通过健康检查后再进入下一轮的更新
在启动instance refresh
时,有些概念要提前了解:
instance refresh
时,ASG维护最少健康实例的百分比。例如将它设置成100%,则一次只有一个EC2进行替换;如果将它设置成0%,则所有的EC2同时被替换InService
后,设置warmup时间后,它需要经过这段warmup时间才能接收流量。适用于应用需要初始化(加载数据库、从互联网拉数据等)的场景Launch Template
。在进行instance refresh
过程中,如果线上流量突增、发生了扩容事件,此时会使用Desired configuration
来启动新扩容的机器;在instance refresh
过程完成后,ASG的Launch template
也被更新成Desired configuration
instance refresh
是滚动更新的,当它达到特定的百分比后,可以配置checkpoint,让ASG临时停止滚动更新过程,发送一条通知给管理员。管理员收到通知后,检查新版本的配置是不是正常,如果发现有问题,管理员可以选择回退到上一个版本接下来我们将动手实践下Instance refresh
本章开始我们创建Launch template
,并基于它创建了ASG。访问服务的页面输出以下内容:
本节我们将更新这个Launch template
,创建v2版本,让后端输出Hello World v2
。然后使用instance refresh
的特性,将ASG的机器全部替换为v2版本。
进入Launch template
页面,点击Modify template
:
输入新版本的描述,选择基于v1来创建新的版本:
下拉到最后,更新userdata,让后端输出Hello World v2
,最后点击Create template version
:
新版本的Launch template
创建完成后,可以将它设置成默认版本,也可以不做操作(不影响下一步):
在ASG的页面,点击Start instance refresh
:
设置Minimum healthy percentage
、Instance warmup
、Checkpoints
属性(Checkpoint这里仅用于展示如何设置,并不会启动它):
在Desired configuration
部分,使用新版本的Launch template
:
最后点击创建。
在创建完Instance refresh
后,随时可以取消它。一开始进入Pending
状态:
然后启动新的实例:
实例启动完成后,等待实例warmup:
warmup完成后,等待ELB的health check通过:
当health check通过后,进入下一轮的滚动更新:
最后等所有实例更新完成后,访问ELB能够刷新到v2版本的效果: