管理 Kubernetes 清单更改的正确方法是啥?
Posted
技术标签:
【中文标题】管理 Kubernetes 清单更改的正确方法是啥?【英文标题】:What is the right way to manage changes in kubernetes manifests?管理 Kubernetes 清单更改的正确方法是什么? 【发布时间】:2019-08-29 03:31:03 【问题描述】:我使用 terraform 已经有一段时间了,我真的很喜欢它。我还设置了Atlantis,以便我的团队可以拥有“GitOps”流程。这是我目前的流程:
在 Terraform 文件中添加或删除资源 将更改推送到 GitHub 并创建拉取请求 亚特兰蒂斯接受变化并制定地形计划 PR 获得批准后,亚特兰蒂斯将应用更改我最近发现自己需要使用 Amazon EKS 设置一些托管 Kubernetes 集群。虽然 Terraform 能够创建大部分基础架构,但在设置一些 k8s 资源时它还不够(不支持网关或入口,不支持 alpha/beta 功能等)。因此,我一直依赖使用 kubectl 的手动方法:
将资源添加到现有文件或创建新文件 在生成文件中添加一行,在新文件上运行适当的命令(kubectl apply 或 create) 如果我使用的是 helm 图表,请添加一行helm template
然后 kubectl apply
(我不太喜欢使用 tiller,而且 helm3 反正已经摆脱了它)
如果我想删除一个资源,我手动使用kubectl delete
这个过程感觉远没有我们在 Terraform 中所做的那样干净。有几个关键问题:
没有真正的预演。使用kubectl --dry-run
或kubectl diff
并没有真正起作用,它只是一个客户端差异。服务器端差异函数目前处于 alpha 阶段
没有状态文件。如果我从清单中删除内容,我必须记得手动将其从集群中删除。
没有明确的方法来实现 gitops。我查看了Weaveworks Flux,但这似乎更适合部署应用程序。
makefile 变得越来越复杂。感觉这不是可扩展的。
我应该承认我对 Kubernetes 还很陌生,所以可能会忽略一些显而易见的事情。
有没有办法让我在 Kubernetes 世界中实现类似于我在 Terraform 中的流程?
【问题讨论】:
我个人同意您对这里问题的描述,因为它反映了我自己去年的经历。如果您想要将 Terraform 集群创建清晰地链接到 Helm 部署中,但提供比原始kubectl
更强大的解决方案,我可以推荐 Ansible 中的 k8s
模块吗?它可以很好地弥合 Terraform 的基础设施设置和 Helm 的部署之间的差距。确保由 Terraform 输出的 kubeconfig
被 Ansible 拾取。我自己在一个 Jenkins 流水线中将所有这些东西链接在一起,但你的选择也应该很好用。
【参考方案1】:
这更像是一个意见问题,所以我会回答一个意见。如果您喜欢管理配置,可以尝试以下一些工具:
如果您想使用现有的 YAML 文件(配置)并使用更高级别的内容,您可以尝试kustomize。 如果您想使用Jsonnet 管理 Kubernetes 配置,您应该查看Ksonnet。请记住,将来不会支持 Ksonnet。如果您只想以自动化方式自动执行helm update
,则还没有工具。此时您将不得不构建一些东西来协调一切。例如,我们最终创建了一个内部工具来执行此操作。
【讨论】:
Ksonnet 不再受支持。 “ksonnet 背后的团队正在退出该项目。因此,ksonnet 的工作将结束,GitHub 存储库将被归档”。 ksonnet.io 我的问题与模板无关(Helm 对我来说很好用)。问题是指以自动方式实际应用更改。 知道了,没有真正的工具,我们最终创建了自己的工具来运行自动命令,如helm upgrade
。以上是关于管理 Kubernetes 清单更改的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 feign 和 spring cloud kubernetes 的正确方法是啥?
Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理
Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理