6

我当然检查了 helm.sh,但乍一看,整个设置似乎有点复杂(helm-client 和 tiller-server)。在我看来,在大多数情况下,我只需拥有一个 helm-client 就可以摆脱困境。

这就是我目前所做的

假设我有一个由 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 东西现在可以应用了。每次进行更改时,我都会更改规范文件,对其进行测试,编写更新脚本以帮助从上一个版本迁移到当前版本,然后提交并标记它。

问题

  1. 到目前为止,这对我有用,但这是“正确的方法”吗?
  2. 为什么helm会有分蘖服务器?在客户端做模板不是更简单吗?当然,如果您想将部署的活动与应用程序的知识(如机密)分开,则模板必须在服务器上进行,否则为什么呢?
4

3 回答 3

1

似乎https://redspread.com/(开源)解决了这个特定问题,但需要更多的开发才能投入生产 - 至少从我的团队快速浏览它。

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

于 2016-11-24T21:37:56.100 回答
0

注意:Tiller 在 Helm v3 中被移除。查看此答案以详细了解为什么在 Helm v2 中需要分蘖以及为什么在 Helm v3 中将其删除:https ://v3.helm.sh/docs/faq/#removal-of-tiller

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

  • 仅选择 k8s 应用程序声明式定义之外的配置管理系统。例如,Helm(如上面的答案https://stackoverflow.com/a/42053983/914967),Kustomize。它们只是纯粹的客户端。
  • 通过update.sh使用流行工具(如kubectl applyhelm install.
  • 使用argocd、Travis CI 或 GitHub Actions等 CI/CD 引擎从 git 标签/分支推动变更交付。
  • 使用分支策略,这样您就可以在直接交付之前尝试对 test/staging/production/ 环境进行更改。
于 2019-11-29T14:10:47.783 回答
0

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

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

于 2017-02-05T15:45:07.947 回答