为什么盐云与Terraform相比如此缓慢



我正在比较盐云terraform作为管理GCE基础设施的工具。我们使用盐来管理虚拟机配置,所以我自然更愿意使用盐云作为堆栈的一个组成部分,并逐步淘汰terraform作为遗留的东西。

但是,我的用例对 VM 部署时间至关重要,因为我们提供的 PaaS 解决方案可根据客户请求部署 VM,因此只需单击一下按钮即可在几秒钟内交付准备好的 VM。

令我困惑的是,为什么盐云需要这么长时间来部署基本机器。

我创建了并驾齐驱的简单测试,使用地形盐云(均在并行模式下)基于默认的 CentOS7 映像部署三个虚拟机。而且时差是惊人的 - terraform需要大约30秒来部署请求的计算机(这类似于通过GCE GUI部署所需的时间),盐云需要大约220秒在同一区域中在同一帐户下部署完全相同的计算机。特别奇怪的是,前 130 秒的盐云没有开始部署,似乎什么都不做,只有在大约 130 秒后,它才会显示消息deploying VMs,并且这些虚拟机在 GUI 中显示为in deployment

关于盐云,我是否缺少一些明显的东西,使它如此缓慢?可以以某种方式加快速度吗?我更愿意使用完整的盐堆,但是由于目前的速度问题,我真的负担不起。

请注意,这个答案是基于我对地形和盐云的理解的推测,我还没有通过实验验证!

我认为原因是 Terraform 保留了上次运行的状态(本地或远程),而盐云不保留状态,因此在实际配置任何内容之前会查询云。

这两种

方法(在执行某些操作之前保持状态或查询)是必需的,因为这两种工具都是幂等的(您可以安全地多次运行它们)。

例如,我认为如果您删除 Terraform 的状态文件并重新运行它,它将假设云中没有任何内容,并且实际上会实例化一个副本。这并不是说 terraform 做错了,而是表明状态很重要,Terraform 文档清楚地表明,在团队中操作时,应该远程保存状态,正是为了避免此类问题。

按照我的思路,这也应该意味着,如果你在详细调试模式下运行盐云,或者查看它生成的网络流量,在你提到的前 130 秒内(在它说"部署 VM"之前),你应该看到从盐云到云提供商的查询,以动态构造状态。

最后一点,salt-cloud 不存储先前运行的状态这一事实并不意味着它在团队环境中自动安全使用。只要没有两个团队成员同时运行它,就可以安全使用。另一方面,例如,在 Consul 上具有远程状态的 terraform 允许锁定,以便团队并发使用始终是安全的。

最新更新