管理Kubernetes清单更改的正确方法是什么?

时间:2019-04-08 03:05:05

标签: kubernetes terraform devops aws-eks terraform-provider-kubernetes

我使用terraform已有一段时间了,我真的很喜欢它。我还设置了Atlantis,以便我的团队可以拥有“ GitOps”流程。这是我当前的过程:

  • 添加或删除Terraform文件中的资源
  • 将更改推送到GitHub并创建一个拉取请求
  • 亚特兰蒂斯号(Atlantis)拾取变化并创建地形计划
  • 公关批准后,亚特兰蒂斯将应用更改

我最近发现自己需要使用Amazon EKS建立一些托管的Kubernetes集群。尽管Terraform能够创建大多数基本基础结构,但在设置某些k8s资源时不起作用(不支持网关或入口,不支持alpha / beta功能等)。因此,相反,我一直依赖于使用kubectl的手动方法:

  • 将资源添加到现有文件或创建新文件
  • 在生成文件中添加一行,以在新文件上运行适当的命令(应用或创建Kubectl)
  • 如果我正在使用舵图,请在helm templatekubectl apply之间添加一条线(我真的不喜欢使用分,,而且helm3还是摆脱了它)
  • 如果要删除资源,请使用kubectl delete手动完成

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

  • 没有真正的试运行。使用kubectl --dry-runkubectl diff并不能真正起作用,它只是客户端差异。服务器端的diff函数当前处于alpha版本
  • 没有状态文件。如果我从清单中删除内容,则必须记住也要从集群中手动删除它。
  • 尚无实现gitop的明确方法。我看过Weaveworks Flux,但这似乎更适合于部署应用程序。
  • makefile变得越来越复杂。感觉这不是可伸缩的。

我应该承认我是Kubernetes的新手,所以可能忽略了一些明显的事情。

在Kubernetes宇宙中,我是否有办法实现与Terraform类似的过程?

1 个答案:

答案 0 :(得分:1)

这更多是一个观点问题,因此我将以观点回答。如果您想管理配置,可以尝试以下一些工具:

  • 如果您想使用现有的YAML文件(配置)并在更高级别上使用某些功能,可以尝试kustomize
  • 如果要使用Jsonnet管理Kubernetes配置,则应查看Ksonnet。请记住,将来将不再支持Ksonnet。

如果您只想自动执行helm update,则没有工具。此时,您将必须构建一些东西来编排所有内容。例如,我们最终创建了一个内部工具来执行此操作。

相关问题