如何配置两组主机(3 台用于 QA,3 台用于 Prod)以使用 Spinnaker 部署分布式系统?

How do I configure two sets of hosts (3 for QA and 3 for Prod) for deploying a distributed system using Spinnaker?

我正在使用 Spinnaker 将 3 层系统部署到 QA,然后部署到生产。每个系统中的配置文件都指向其他系统。如果我在 AMI 中加入 QA 配置,那么在升级到 Prod 时如何更改它?是 1) 通过拥有两组不同的 AMI - 一组用于 QA,一组用于 Prod,或者 2) 通过没有配置的 AMI,然后在部署后(以某种方式)配置它以更改配置文件? 推荐什么?

我自己在公司也遇到过类似的问题。 我的解决方案是使用 Packer 脚本为特定目的创建 AMI。这让我可以 - 1. 尽可能多地配置服务器,然后将这些配置存储在 AMI 中。 2. 如果需要,可以轻松更改这些配置。

然后,使用 Ansible 脚本启动 AMI,并在特定实例上进行所有其余配置。

就我而言,我选择为演出和制作创建不同的图像,但主要是因为它们差异很大。如果它们更相似,我可能会选择对两者使用一个 AMI。

Ansible 在这里为您提供的优势是分解您的配置,包括一次写入生产和临时服务器。

您可以在部署时为集群定义自定义 AWS user data(在集群配置的高级设置下)。然后您可以在您的应用程序中检索此用户数据。这将允许您更改这些类型的配置。

在 Netflix,我们有一系列初始化脚本,这些脚本被嵌入到基础映像中,并提供了一种通过 nebula / gradle 扩展自定义启动 (init.d) 脚本的机制。这通常会设置诸如 NETFLIX_ENVIRONMENT 之类的值,这些值是众所周知的并且是针对这些值进行编程的。

我们还通过 https://github.com/Netflix/archaius 使用特征翻转机制。这允许我们添加集群外部的属性,但可以针对它们。

当涉及到安全凭据时,本演示文稿中概述了该方法,但本质上,图像会到达颁发此类凭据的外部服务。 https://speakerdeck.com/bdpayne/key-management-in-aws-how-netflix-secures-sensitive-data-without-its-own-data-center