我目前使用运行在裸机节点上经由Ansible配置的Kubernetes集群。计划迁移到云端,并为此阅读Terraform和Packer的相关内容。除了数据迁移之外,似乎我们有一个相当直接的迁移路径:
1. 使用现有的Ansible脚本构建图像。 2. 通过Terraform将构建的镜像部署到云端。 3. 使用当前的工具部署我们的Kubernetes资源。
这非常棒。现在我们拥有了使用最先进工具的不可变基础设施。
我遇到的问题是如何对通过Packer构建的图像进行版本控制。在这些图像中,我们必须升级一些软件。有时,Ansible脚本会更改,但有时只是需要最新的安全更新。无论哪种情况,Packer都必须为我们构建新的镜像,我们必须通过Terraform部署它。如果新的镜像出现问题,我们将不得不回退到旧版。
我可以想象通过编辑模板并更改terraform配置来手动完成此操作,但这不适用于CI/CD流水线。另一个问题是我们可能会在不同的区域和服务商之间移动。因此,某个版本的镜像可能存在于一个区域中,而在另一个区域中则不存在,理想情况下,流水线应创建镜像(如果不存在)并使用现有镜像(如果已经存在)。这可能会导致不同区域或云中的映像不同,特别是因为它们可能在不同日期构建,并且应用了不同的安全更新。
所有这些都内置于Docker工作流程中,但是使用Packer远非显而易见。我找不到任何涵盖此主题的文档或教程。Packer和Terraform中是否有内置的版本控制功能?如果缺少图像,则Terraform能够调用Packer吗?是否有公认的最佳实践?
我可以想象通过使用云提供商的API检查所需镜像是否存在并在执行Terraform之前为任何缺失的镜像调用Packer来自动化此过程。这将起作用,但我不想为每个云提供商编写自定义集成,并且听起来应该由Terraform提供。我以前没有使用过Terraform,所以也许我不知道该去哪里寻找,也许在Terraform中实现它并不难,但是为什么没有任何教程向我展示呢?
1. 使用现有的Ansible脚本构建图像。 2. 通过Terraform将构建的镜像部署到云端。 3. 使用当前的工具部署我们的Kubernetes资源。
这非常棒。现在我们拥有了使用最先进工具的不可变基础设施。
我遇到的问题是如何对通过Packer构建的图像进行版本控制。在这些图像中,我们必须升级一些软件。有时,Ansible脚本会更改,但有时只是需要最新的安全更新。无论哪种情况,Packer都必须为我们构建新的镜像,我们必须通过Terraform部署它。如果新的镜像出现问题,我们将不得不回退到旧版。
我可以想象通过编辑模板并更改terraform配置来手动完成此操作,但这不适用于CI/CD流水线。另一个问题是我们可能会在不同的区域和服务商之间移动。因此,某个版本的镜像可能存在于一个区域中,而在另一个区域中则不存在,理想情况下,流水线应创建镜像(如果不存在)并使用现有镜像(如果已经存在)。这可能会导致不同区域或云中的映像不同,特别是因为它们可能在不同日期构建,并且应用了不同的安全更新。
所有这些都内置于Docker工作流程中,但是使用Packer远非显而易见。我找不到任何涵盖此主题的文档或教程。Packer和Terraform中是否有内置的版本控制功能?如果缺少图像,则Terraform能够调用Packer吗?是否有公认的最佳实践?
我可以想象通过使用云提供商的API检查所需镜像是否存在并在执行Terraform之前为任何缺失的镜像调用Packer来自动化此过程。这将起作用,但我不想为每个云提供商编写自定义集成,并且听起来应该由Terraform提供。我以前没有使用过Terraform,所以也许我不知道该去哪里寻找,也许在Terraform中实现它并不难,但是为什么没有任何教程向我展示呢?