从 kops 派生可重用的地形配置

deriving re-useable terraform configuration from kops

我使用 Terraform 管理已建立的 AWS ECS 应用程序。 Terraform 还管理 4 个 AWS 环境的所有其他方面,包括 VPC、子网、堡垒主机、RDS 数据库、安全组等。

我们通过将所有通用配置放在模块中来管理我们的 4 个环境,这些模块使用从环境特定的 terraform 文件派生的变量进行参数化。

现在,我们正在尝试迁移到使用 Kubernetes 而不是 Amazon ECS 进行容器编排,我正在尝试逐步执行此操作,而不是采用大爆炸式方法。特别是,我想使用 terraform 来配置 Kubernetes 集群并将其 link 提供给其他 AWS 资源。

我最初希望做的是从 kops create cluster 捕获 terraform 输出,通过使用环境特定变量对其进行参数化来概括它,然后在所有 4 个环境中使用这个 kubernetes 模块。

但是,我现在意识到这行不通,因为 k8s 节点和主节点都引用 kops 状态桶(在 s3 中),而且我似乎要克隆该桶并重写包含的文件其中。这似乎是一种管理 kubernetes 环境的相当脆弱的方式——如果我重新创建 terraform 环境,相关的状态 kops 状态桶将与 AWS 环境不一致。

在我看来,kops 生成的 terraform 可能对管理环境的单个实例很有用,但它不容易应用于多个环境 - 实际上每个环境都需要一个 kops 生成的 terraform,而且没有办法重用 terraform 来建立新环境 - 为此,您必须放弃声明式方法并求助于命令式 kops create cluster 命令。

我是否缺少一种使用单个 terraform 模块管理多个类似 kubernetes 环境定义的好方法?

我不确定你是如何得出结论的,Terraform(这会造成比它解决的问题更多的麻烦,这绝对是一个尽快摆脱的工具),或者必须复制 S3 存储桶。
我敢肯定您会对 kops 的 cluster template 功能感兴趣。
您不需要生成、破解和启动(和调试...)Terraform,并且 kops 模板即使不是比 Terraform 更容易(并且更具体...)维护,也同样容易。 当 kops 发布新版本时,您也不必重新生成和重新破解您的 Terraform 脚本!

希望对您有所帮助!