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

如何控制kubernetes应用程序的版本?,kubernetes,microservices,kubernetes-helm,Kubernetes,Microservices,Kubernetes Helm,当然,我已经签出了helm.sh,但乍一看,整个设置似乎有点复杂(helmclient&tillerserver)。在我看来,在大多数情况下,只要有一个掌舵客户,我就可以脱身 这就是我目前所做的 假设我有一个由3个服务组成的项目,即postgres,express,nginx 我创建了一个名为product release的目录,如下所示: product-release/ .git/ k8s/ postgres/ Deployment.y

当然,我已经签出了helm.sh,但乍一看,整个设置似乎有点复杂(helmclient&tillerserver)。在我看来,在大多数情况下,只要有一个掌舵客户,我就可以脱身

这就是我目前所做的

假设我有一个由3个服务组成的项目,即
postgres
express
nginx

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

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
通常的git内容现在可以应用了。每次进行更改时,我都会对规范文件进行更改,测试它们,编写更新脚本以帮助从上一个版本移动到当前版本,然后提交并标记它

问题

  • 到目前为止,这对我很有效,但这是“正确的方法”吗
  • 为什么
    helm
    有舵柄服务器?在客户端做模板不是更简单吗?当然,如果您想将部署活动与应用程序知识(如机密)分开,那么模板必须在服务器上进行,否则为什么
  • 似乎(开源)解决了这个特殊的问题,但在生产准备就绪之前需要更多的开发——至少从我的团队快速浏览一下

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

    我们正在使用(最新/酝酿中的版本)和Helm图表的中央存储库(带有为我们的组件版本构建的参考容器映像)


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

    注意:Helm v3中删除了Tiller。查看此答案,了解为什么在头盔v2中需要舵柄以及为什么在头盔v3中移除舵柄的详细信息:

    根据的想法,您所做的是一种正确的方式(从git回购中执行发布)。但是,如果您想进一步推广,使其更加普遍,您可以计划更多的目标,包括:

    • 仅选择k8s应用程序声明性定义之外的配置管理系统。例如,Helm(如上面的答案所示)。它们只是纯客户端
    • 通过使用诸如
      kubectl apply
      helm install
      等流行工具更改
      update.sh
      ,避免定制发布过程
    • 使用CI/CD引擎,如Travis CI或GitHub操作,从git标记/分支驱动更改交付
    • 使用分支策略,以便您可以在直接交付测试/登台/生产/环境之前尝试更改