我如何控制kubernetes应用程序的版本?

时间:2016-11-24 12:48:39

标签: kubernetes microservices kubernetes-helm

我当然检查了helm.sh,但乍一看整个设置看起来有点复杂(helm-client& tiller-server)。在我看来,在大多数情况下,只要拥有一个helm-client就可以逃脱。

这就是我目前的做法

我们说我有一个由3项服务组成的项目即。 watch -n 1 'ps -ef|grep "AppName"' postgresexpress

我创建了一个名为nginx的目录,如下所示:

product-release

通常的git东西现在可以申请。每次我做出更改时,我都会对spec文件进行更改,测试它们,编写更新脚本以帮助从最新版本移动到当前版本,然后提交并标记它。

问题

  1. 到目前为止,这对我有用,但这是"正确的方式"?
  2. 为什么product-release/ .git/ k8s/ postgres/ Deployment.yaml Service.yaml Secret.mustache.yaml # Needs to be rendered by the dev before use express/ Deployment.yaml Service.yaml nginx/ Deployment.yaml Service.yaml updates/ 0.1__0.2/ Job.yaml # postgres schema migration update.sh # k8s API server scritps to patch/replace existing k8s objects, and runs the state change job 有分蘖服务器?在客户端进行模板化是不是更简单?当然,如果你想将部署的活动与应用程序的知识(如秘密)分开,那么模板必须在服务器上发生,但为什么呢?

3 个答案:

答案 0 :(得分:1)

似乎https://redspread.com/(开源)解决了这一特定问题,但在生产准备就绪之前需要更多的开发 - 至少从我的团队快速浏览一下。

我猜我们现在坚持将yaml文件与已部署的应用程序一起保存在git中。

答案 1 :(得分:0)

我们正在使用kubernetes/helm(最新/孵化版本)和Helm图表的中央存储库(包含为我们的组件版本构建的引用容器图像)。

换句话说,Helm包定义及其依赖项与构成Web应用程序的几个组件的源代码和图像定义是分开的。

答案 2 :(得分:0)

注意:Helm v3中已删除了耕种机。请查看此答案,以查看有关为何在Helm v2中需要分till以及为何在Helm v3中将其移除的详细信息:https://v3.helm.sh/docs/faq/#removal-of-tiller

根据GitOps的想法,您所做的是正确的方法(从git repo执行释放)。但是,如果您想进一步推广它以使其更普遍,则可以计划更多目标,包括:

  • 仅选择k8s应用程序声明式定义之外的配置管理系统。例如,头盔(如上述答案https://stackoverflow.com/a/42053983/914967),Kustomize。它们仅是纯客户端。
  • 通过使用流行的工具update.shkubectl apply来更改helm install,从而避免自定义发布过程。
  • 使用argocd,Travis CI或GitHub Actions等CI / CD引擎来驱动git标签/分支的变更交付。
  • 使用分支策略,以便您可以在直接交付测试/过渡/生产/环境之前尝试对其进行更改。