Agent是一种常见的IaaS软件管理设备的方式;例如,ZStack使用Python agents去管理KVM主机。因为海量的设备,安装和升级agents成为巨大的挑战,所以大多数IaaS软件把这个问题留给客户或分发商,从而导致解决方案变得脆弱,因为缺乏IaaS软件本身的支持。ZStack从一开始就在考虑这个问题,先后尝试了Puppet、Salt和Ansible,最后实现与Ansible无缝并对用户透明的集成。所有的ZStack agents通过Ansible自动部署、配置、升级;用户可能根本没有注意到他们的存在。
动机
IaaS软件通常是一个包含很多小程序的组合软件。理想情况下,IaaS软件可以被写成一个中央管理软件,可以通过设备的SDK和设备对话;但在现实中,设备要么没有提供SDK,要么提供的SDK不完整,迫使IaaS软件必须部署一个叫agent的小程序去控制它们。虽然ZStack把所有服务打包在一个单一的进程中(详见“进程内的Microservices架构”),部分agent依旧需要部署到不同的设备上以控制它们。部署agent的过程中,不仅需要安装agent和相关依赖的软件,还需要配置目标设备,这并不简单,而且通常需要用户做大量的手动工作。当IaaS软件管理着大量的设备的时候,这个问题变得非常显著,甚至会限制数据中心规模。
问题
部署、升级agent以及配置目标设备的问题都属于配置管理问题,Puppet、Chef、Salt和Ansible这类软件就是旨在解决这类问题。许多开发人员已经开始使用这些工具软件将IaaS软件包装成一个易于部署的方式;例如,为了安装OpenStack,你可能会试图找到一些puppet模块而不是依据它提供的文档手动完