我使用terraform管理已建立的AWS ECS应用程序。 terraform还管理4个AWS环境中每个环境的所有其他方面,包括VPC,子网,堡垒主机,RDS数据库,安全组等。
我们通过将所有通用配置放入模块中来管理4种环境,这些模块使用从特定于环境的terraform文件派生的变量进行参数化。
现在,我们正尝试迁移到使用Kubernetes而不是Amazon ECS进行容器编排,而我正尝试以增量方式进行此操作,而不是采用爆炸式方法。特别是,我想使用terraform来配置Kubernetes集群并将其链接到其他AWS资源。
我最初希望做的是捕获kops create cluster
的terraform输出,通过使用特定于环境的变量对它进行参数化来对其进行概括,然后在所有4个环境中使用这个kubernetes模块。
但是,我现在意识到这是行不通的,因为k8s节点和主节点都引用了kops状态存储桶(在s3中),并且似乎我将克隆该存储桶并重写其中包含的文件。这似乎是管理kubernetes环境的一种相当脆弱的方法-如果我重新创建terraform环境,则相关的状态kops状态存储区将与AWS环境不一致。
在我看来,kops生成的地形可能对管理一个环境的单个实例很有用,但是它并不容易应用于多个环境-您实际上需要为每个环境使用一个kops生成的地形,因此无法重用terraform来建立新的环境-为此,您必须退出声明式方法,而采用命令式kops create cluster
命令。
我是否缺少一种通过一个terraform模块管理多个类似kubernetes环境的定义的好方法?
答案 0 :(得分:0)
我不确定您是如何得出这两个结论的,Terraform(这将带来比其解决的问题更多的麻烦,这肯定是摆脱asap的工具),还是必须复制S3存储桶。
我很确定您会对kops的cluster template功能感兴趣。
您不需要生成,修改和启动(和调试...)Terraform,并且kops模板与Terraform一样容易维护,即使维护起来不那么容易(而且更加具体...)。
当kops发布新版本时,您也不必重新生成和重新破解Terraform脚本!
希望这会有所帮助!