Bouncer:2018年10月18日,简单的AWS自动缩放滚轮与Palantirfollow·8分钟读取
我们构建了Bouncer,以使操作AWS自动缩放组(ASG)更容易。它循环运行实例,以确保它们与启动配置中定义的匹配。自动缩放组不仅可用于响应负载,还可用于提高可靠性。AWS不提供一种内置方式来循环自动缩放组,除非您使用的是AWS CloudFormation,它对于许多环境来说都不是一个足够健壮的工具。这使得在ASG中部署新的发射配置既耗时又乏味。这就是bouncer的作用:它可以自动用新实例替换自动缩放组中的所有实例。一个简单的bouncer调用如下:
bouncer serial-A:
bouncer将查找未运行最新启动配置的实例,终止它们,然后等待替换成功启动,然后再移动到下一个实例。任何未能启动的实例都将中止bouncer运行。
自动缩放组
云中的工程基础设施意味着工程解决失败。在一个瞬时故障的世界中,自动恢复是必要的。自动缩放组为恢复EC2实例提供了一个有效的解决方案,无需人工干预。它们可以处理常见的工作流,例如重新启动不健康的服务、替换降级的实例以及推出新版本。在Palantir,我们几乎运行自动伸缩组中的每个EC2实例,甚至一些只有一个实例的服务。通过指定所需的主机数量和称为启动配置的模板来配置自动缩放组。启动配置指定AMI ID、实例类型、安全组和其他自定义设置。但是,启动配置是关于如何创建新实例的说明,而不是当前实例的外观要求。更改自动缩放组的启动配置不会触发任何操作,ddos防御云服务,这意味着操作员可以在终止旧节点的同时采取措施推出新节点。这会使常规操作(如推出更新的图像)成本高昂。这使得操作员处于所需状态(启动配置)与部署状态(部署节点)不匹配的位置。在AWS控制台中,自动缩放组由新节点和旧节点组成也不明显。为了最大限度地减少期望状态偏离实际状态的可能性,该过程已经成熟,可以实现自动化。为了使这一过程自动化,您需要一个解决方案:
确定已创建新的启动配置确定哪些节点是旧的,哪些是最新的终止旧节点并等待新节点进入健康报告状态
我们希望以一种简单的方式解决此问题,而不需要构建有状态的应用程序或尝试处理复杂的问题一组Lambda函数,因此我们构建了bouncer。
bouncer
bouncer是一个简单的go二进制文件,可以自动将ASG中的所有实例转换为更新的启动配置。它设计为作为独立二进制文件或CD进程的一部分运行。它可以在串行和金丝雀两种模式下运行:
串行模式是一种在线部署策略,一次删除和添加一个实例。金丝雀模式是一种蓝/绿部署策略:首先测试一个新实例,然后添加足够的新实例以使所需容量翻倍,一旦新实例投入使用,最后移除所有旧实例。
串行模式适用于不能水平扩展的服务。例如,我们的Jenkins服务器使用一个持久的EBS卷来存储作业数据。使用串行模式意味着旧实例必须在启动新实例之前释放EBS卷。这通过保证EBS卷始终是空闲的,从而简化了自动化。金丝雀模式适用于水平扩展的服务。例如,我们的Jenkins服务器将很乐意再接受50名Jenkins员工,香港高防cdn节点,并将容忍随后50名老员工的流失。
在规模上
在Palantir,我们在数千台主机上运行来自不同来源的数百项服务。它们都有许多不同的配置方法、文件系统布局和生命周期管理。手动管理所有这些配置是不现实的,因此作为一家公司,我们已经将Terraform和Terraform Enterprise用作基础架构的CI/CD进行了标准化。虽然Terraform管理并自动更新我们所有服务的启动配置,但它没有内置的机制来循环AWS自动缩放组。在bouncer之前,服务所有者有自己的滚动方法,防御ddos攻击思路,通常是一个一次性脚本,用于根据需要循环节点。我们希望将我们的产品线纳入Terraform CI/CD管道。解决方案是让Terraform invoke bouncer作为apply的一部分执行滚动:
resource"null_resource""instance_bouncer"{触发器{lc_change="${aws_autoscaling_group.service.launch_configuration}"}provisioner"local exec"{command="./bouncerw serial-a"${aws_autoscaling_group.service.name}:${aws_autoscaling_group.service.desired_capacity}'"}}
Terraform的null_资源的触发器部分是一个插值字符串,用于通知Terraform何时重新运行指定的供应器。在这种情况下,只要我们的自动缩放组的启动配置发生更改,就会重新运行此空_资源,从而触发bouncer。Bouncer将一次遍历每个旧实例,终止它,并等待启动替换并恢复正常。与Terraform的集成工作非常顺利。
11-25 来源:长虹华伟
09-30 来源:长虹华伟
10-26 来源:长虹华伟
08-03 来源:长虹华伟
06-11 来源:长虹华伟
06-05 来源:长虹华伟
02-07 来源:长虹华伟
03-18 来源:长虹华伟
03-02 来源:长虹华伟
11-25 来源:长虹华伟