【问题标题】:Helm with two deployments具有两个部署的 Helm
【发布时间】:2019-06-29 19:57:52
【问题描述】:

我是使用 Helm 的新手,我不确定当您有两个部署时哪个是最佳方法。 我为我的应用程序创建了一个图表。它包含两个部署:

  1. app-nginx-phpfpm.yaml
  2. app-mysql.yaml

我应该将它们保存在同一个图表中,还是应该为 app-mysql.yaml 创建一个子图表?

【问题讨论】:

标签: kubernetes kubernetes-helm


【解决方案1】:

您可以同时拥有这两者,具体取决于您希望如何构建部署。

你应该记住以下几点

注意事项

单一图表的好处

  • 更易于部署:只需部署一次,单一差异
  • 单个版本,因此回滚/升级发生在单个元素上
  • 您可以使用功能标志卸载部件
  • 在不接触其余元素的情况下安装新组件可能会很棘手

单一图表注意事项

  • 更难部署非耦合服务,例如,在升级数据库时用于数据访问的模拟服务
  • 更难解耦和测试每个实例
  • 更难命名和理解每个组件(在不同的版本中,您的 {{.Release.Name}} 已经针对每个“应用程序”进行更改)。
  • 更难提供/跟踪不同组件的不同发布周期
  • 存储在单个 ConfigMap 中的版本,如果您的图表包含例如嵌入的测试数据,这可能会导致大小限制问题

版本控制说明

您可以拥有一个用于测试所有子图表的主图表,并独立打包子图表,但仍将所有内容都放在同一个存储库中。

例如,我通常会保留以下内容:

. / helm / charts / whatever / charts / subchart1
. / helm / charts / whatever / charts / subchart2
. / helm / charts / whatever / values.yaml

. / helm / charts / whatever-master / values.yaml
. / helm / charts / whatever-master / requirements.yaml
. / helm / charts / whatever-subchart1 / values.yaml
. / helm / charts / whatever-subchart2 / values.yaml

并使用主图上的 requirements.yaml 从file://../whatever-subchartx 拉取。

这样我可以拥有whatever-stress-testwhatever-subcomponent-unit-test,同时仍然可以灵活地部署具有不同发布周期的单独组件(如果需要)。

这最终还取决于您的升级策略。 Canary 升级可能需要您以比使用单个图表更具体的方式处理有状态微服务,因此请相应地进行计划。

【讨论】:

    【解决方案2】:

    您可以将单个图表用于两个部署,也可以使用具有两个子图表的主图表,一个用于app-nginx-phpfpm.yaml,一个用于app-mysql.yaml。如果您的整个应用程序不会增长那么多,您可以使用单个图表。但是,如果您打算继续向您的应用程序添加组件(更多部署等),建议您使用子图表。更多信息here.

    【讨论】:

      【解决方案3】:

      图表可能依赖于其他图表;参考 - https://helm.sh/docs/glossary/#chart-dependency-subcharts

      如果您有父应用程序,请说: - 问候应用 和 2 个子应用程序,例如: - 你好世界 - 嗨世界

      您可以为父“greetings-app”创建一个图表,然后在“charts/”目录中移动或创建“helloworld”和“hiworld”图表,然后在安装图表“greetings-app”时创建- 您将自动安装相关图表。您需要在列出依赖项的父级(greetings-app)中创建“requirements.yaml”

      dependencies:
        - name: helloworld
        - name: hiworld
      

      说明性图表文件夹结构将是:-

      • 问候/
        • 图表/
        • 你好世界/
          • 图表/
          • 模板/
          • ....
        • hiworld/
          • 图表/
          • 模板
          • ....
        • Chart.yaml
        • requirements.yaml # 这列出了依赖项

      另一种方法是打包子应用程序并将它们托管在 http 服务器 (GitHub) 上,然后创建列出依赖项的 requirements.yaml

      dependencies:
        - name: helloworld-app
          repository: https://raw.githubusercontent.com/.../myhelmcharts/master/
          version: 0.1.0
          tags:
            - helloworld
        - name: hiworld-app
          repository: https://raw.githubusercontent.com/.../myhelmcharts/master/
          version: 0.1.0
          tags:
            - hiworld
      

      后者可能是首选方法 - 在我看来是软依赖,但应用程序是单独管理的。

      【讨论】:

      • 我知道已经很久了,但我想知道greetings-app, helloworld, hiworld中的安装顺序是什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2020-03-19
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多