如何编排云服务器(虚拟机)实例的工具

34次阅读
没有评论

问题描述

在搜索关键词”编排”、”服务器集群”或”基础设施即服务”时,总是得到关于容器的结果。用户的需求是能够部署、扩展和监控像DO的droplets或AWS的EC2这样的虚拟机实例。目前用户使用的是一个使用Ansible通过REST API生成和配置新创建的机器的CD工具。然而,这两个工具都无法监控已创建的实例、检查其资源使用情况、按需扩展实例或将其映射到相应的HTTP端点(假设1个虚拟机托管n个Web服务)。因此,用户需要一些自定义工具来跟踪实例的数量、状态、DNS服务器,与入口负载均衡器(haproxy)集成以跟踪服务器的运行状况和IP地址和/或新创建的droplets的网络等。
用户不太清楚terraform在这种情况下是否有帮助。根据用户的理解,terraform只能帮助他生成一个新的droplet,而这也可以通过单个HTTP请求完成。如果用户想要更多功能,是否需要使用付费云服务?
用户想知道哪种工具组合对他的需求有帮助。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果您希望从外部监控它,那么自动扩展组和负载均衡器是否可以解决问题。如果是的话,使用类似terraform(支持多云)或cloudformation(特定于云的)这样的工具可以实现这些资源的生成、跟踪和更新配置。Ansible也可能是一种替代方案,但它带来了一些优缺点,因为它是无状态的,并依赖于实际的云资源来跟踪偏差。

方案2

Terraform确实可以帮助您完成许多您想要的工作。
此外,您可能会从像AWS Fargate这样的更受管理的解决方案中受益(您也可以使用Terraform声明它)。
您总是会得到关于容器和无服务器的结果,因为它们是未来的发展方向,我们大多数人都在将我们的传统工作负载迁移到这些技术上。您应该尽量避免使用EC2部署模式来启动新项目,特别是如果您没有管理所有这些的技能或者没有足够的资金来浪费。
亚马逊提供了自动扩展组,允许扩展EC2实例。对于监控,您可以使用基本指标(CPU、网络等),或者安装一个代理来监控系统内部(RAM和其他应用程序特定数据)。安装代理(如Datadog或AWS CloudWatch等供应商)通常是通过实例的”User Data”来完成的。Terraform允许您将”User Data”脚本传递给实例,并具有良好的模板语法。
正如之前提到的,Ansible不是这个工作的正确工具。我会说它在这个领域是可怕的。主要问题是缺乏状态跟踪和它是过程性的,而不是声明性的(这是我想要的东西完成的方式,而不是我想要的最终状态是什么,你自己去弄清楚吧)。
如果您使用的是自动扩展组,这似乎是您所建议的,您不需要跟踪单个实例。您定义最小值、最大值和扩展条件。Terraform肯定可以声明和部署自动扩展组。
自动扩展组允许您定义健康检查来终止实例。
如果您处于自动扩展空间,您不希望为实例设置单独的DNS记录(尽管对于HAProxy的服务发现,您可能需要执行SRV记录或与Cloud Map集成)。此外,如果您更改负载均衡器技术,AWS ALB允许您将实例附加到目标组,而无需进行任何操作。
AWS ALB或HAProxy都可以使用健康检查,因此您的编排工具不需要了解实例的健康状况。
我们使用Terraform管理数千个实例和容器,数百个ALB和少数个lambda。我们让Fargate和其他工具管理部署过程的蓝/绿方面,但Terraform定义了我们想要的基础架构。
切换到容器,使用AWS Fargate,这样您就不必管理自动扩展的编排、健康检查、回滚等方面。放弃Ansible,它不适合这个工作。一定要尝试一下Terraform。

正文完