4

我使用 terraform 已经有一段时间了,我真的很喜欢它。我还设置了亚特兰蒂斯,以便我的团队可以拥有“GitOps”流程。这是我目前的流程:

  • 在 Terraform 文件中添加或删除资源
  • 将更改推送到 GitHub 并创建拉取请求
  • 亚特兰蒂斯接受变化并制定地形计划
  • PR 获得批准后,亚特兰蒂斯将应用更改

我最近发现自己需要使用 Amazon EKS 设置一些托管 Kubernetes 集群。虽然 Terraform 能够创建大部分基础设施,但在设置一些 k8s 资源时却存在不足(不支持网关或入口,不支持 alpha/beta 功能等)。因此,我一直依赖使用 kubectl 的手动方法:

  • 将资源添加到现有文件或创建新文件
  • 在生成文件中添加一行,在新文件上运行适当的命令(kubectl apply 或 create)
  • 如果我使用的是 helm 图表,请添加一行,helm template然后kubectl apply(我真的不喜欢使用分蘖,而且 helm3 无论如何都摆脱了它)
  • 如果我想删除资源,我手动执行kubectl delete

这个过程感觉远没有我们在 Terraform 中所做的那样干净。有几个关键问题:

  • 没有真正的空运行。使用kubectl --dry-runorkubectl diff并没有真正起作用,它只是一个客户端差异。服务器端差异函数目前处于 alpha 阶段
  • 没有状态文件。如果我从清单中删除内容,我必须记得手动将其从集群中删除。
  • 没有明确的方法来实现 gitops。我看过Weaveworks Flux,但这似乎更适合部署应用程序。
  • makefile 变得越来越复杂。感觉这不是可扩展的。

我应该承认我对 Kubernetes 还很陌生,所以可能会忽略一些明显的东西。

有没有办法让我在 Kubernetes 世界中实现类似于我在 Terraform 中的过程?

4

1 回答 1

1

这更像是一个意见问题,所以我会回答一个意见。如果您喜欢管理配置,可以尝试以下一些工具:

  • 如果您想使用现有的 YAML 文件(配置)并使用更高级别的内容,您可以尝试kustomize
  • 如果你想使用Jsonnet管理 Kubernetes 配置,你应该看看Ksonnet。请记住,将来不会支持 Ksonnet。

如果您只想以helm update自动化的方式自动执行,那么还没有工具。此时您将不得不构建一些东西来协调一切。例如,我们最终创建了一个内部工具来执行此操作。

于 2019-04-08T05:03:56.640 回答