【问题标题】:Helm conditionally install subchartHelm 有条件地安装子图
【发布时间】:2019-05-30 16:09:35
【问题描述】:

有没有办法根据全局 values.yaml 有条件地安装 helm 子图?我将所有内部服务和组件都作为子图表,其中之一是消息队列图表。在我的开发和测试环境(本地 k8s)中,我使用 RabbitMQ,在暂存和生产 (AKS) 中,我使用 Azure 服务总线。根据namespace/values.yaml,要不要安装rabbitmq。

P.S - 我已将所有组件创建为子图表,因此它们都是单个版本的一部分。

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    更新: 使用 helm 3.0 版本和 Chart v2 版本,必须在 Chart.yaml 中添加图表依赖项,而不是单独的 requirements.yaml 文件。因此,如果您在 helm 3 中使用 apiVersion=v2,请参阅 helm v2->v3 changes。这将是:

    apiVersion: v2
    name: myapplication
    description: A Helm chart for Kubernetes
    type: application
    version: 0.1.0
    appVersion: 1.0
    
    dependencies:
      - name: apidocs
        condition: apidocs.enabled
    

    我已经找到答案了:

    在 requirements.yaml 中,添加:

    dependencies:
    - name: api
      condition: api.enabled
    - name: messagequeue
      condition: messagequeue.enabled
    

    在 values.yaml 中添加

    api:
      enabled: true    
    messagequeue:
      enabled: false
    

    现在在安装过程中,将值传递给启用或禁用消息队列,如下所示:

    helm install --dry-run --debug website\ --set messagequeue.enabled=true
    

    helm install --dry-run --debug website\ --set messagequeue.enabled=false
    

    【讨论】:

    • 所以它适用于通过requirements.yaml管理子图表时呈现模板。但是,这种没有存储库的依赖关系会导致包括helm dep uphelm dep build 在内的命令失败。 b/c 问题github.com/helm/helm/issues/3742
    【解决方案2】:

    使用 Helm 版本 v3.4.1。

    我遇到了这个错误。

    helm chart with requirements.yaml, did not find local charts

    "helm dep build" fails if requirements.yaml contains local dependencies and remote one #3742.

    我的解决方案是:

    • charts/(目录)重命名为subcharts/
    • 还有chmod 755 subcharts/*

    当我将本地依赖项放在 charts/ 时,Heml 3 不喜欢它
    此外,Helm dep up 需要权限才能将本地依赖项从您的 subcharts 目录移动到 tmpcharts/ 等等。

    **

    这不是我的发现。

    **

    我从@sgandon 读到这篇文章:

    记录了错误#3742
    comment

    os.Stat() 找不到文件夹的原因。这是 因为调用函数 downloadAll 在更新期间将图表文件夹重命名为 tmpcharts 从而使我们的解压图表在这段时间内无法找到。

    注意:

    !!在 Helm 3 上,requirements.yaml 已被弃用。 !!

    您在 Parent/Main Charts.yaml 中添加依赖项。

    dependencies:
      - name: chart-you-want-to-deploy-1
        repository: file://subcharts/chart-you-want-to-deploy-1
        version: 0.0.1
        condition: chart-you-want-to-deploy-1.enabled
    
      - name: chart-you-want-to-deploy-2
        repository: file://subcharts/chart-you-want-to-deploy-2
        version: 0.0.1
        condition: chart-you-want-to-deploy-2e.enabled
    

    在 Parent/Main Values.yaml 中将我的变量添加到我的全局变量中

    globals:
      chart-you-want-to-deploy-1:
        enabled: true
      chart-you-want-to-deploy-2:
        enabled: false
    

    不要忘记将标志添加到您的命令中。
    就我而言,我使用的是 CI/CD 工具 (Gitlab)

    script:
        - >
          helm dep up Main-Chart-Name && \
           helm upgrade --install \
           --set chart-you-want-to-deploy-1.enabled=false \
           --set chart-you-want-to-deploy-2.enabled=true \
           RELEASE_NAME Main-Chart-Name
    

    我的树

    Main-Chart-Name
    ├── Chart.yaml
    ├── subcharts
    │   ├── chart-you-want-to-deploy-1
    │   │   ├── Chart.yaml
    │   │   ├── charts
    │   │   ├── templates
    │   │   │   └── chart-you-want-to-deploy-1.yaml
    │   │   └── values.yaml
    │   └── chart-you-want-to-deploy-2
    │       ├── Chart.yaml
    │       ├── charts
    │       ├── templates
    │       │   └── chart-you-want-to-deploy-2.yaml
    │       └── values.yaml
    ├── templates
    │   ├── helpers.tpl
    │   ├── my.yaml
    │   ├── main.yaml
    │   └── templates.yaml
    └── values.yaml
    

    附: - 谢谢@Narayana 和@sgandon。感谢你们,我很高兴部署!

    【讨论】:

    • 我试过这个并得到Error: found in Chart.yaml, but missing in charts/ directory: chart-you-want-to-deploy-1。你知道这个错误吗?
    • 是的,当我将子图表放在名为charts/ 的目录中时,我得到了这一点,这就是我创建subcharts/ 目录的原因。确保 helm 有权使用这些目录。我做了 chmod 755 charts/ subcharts/ templates/ 它抛出该错误的原因是因为 Helm Dep 将尝试压缩和移动文件。试试这个,让我知道你的进展情况
    • 我试过这个。它在大多数情况下都有效,但是我遇到了一个问题。我的子图本身有一个远程依赖项。当我做helm dep up 时,子图没有得到它的拉取它的远程依赖项。所以我必须首先进入该子图的 ss 目录,执行 helm dep up 然后返回项目根目录并再次执行 helm dep up 才能正常工作。看来 helm dep up 不是递归的。
    • 当我遇到这个问题时,我只需要确保依赖项的名称与图表文件夹匹配。我的猜测是由于 helm 自动为 charts/ 中的任何内容创建了依赖项,因此您必须匹配该名称才能找到依赖项。
    【解决方案3】:

    我会提出这个(丑陋的)解决方法作为从@sgandon借来的答案:https://github.com/helm/helm/issues/3742#issuecomment-383095917

    dependencies: - name: mobi-postgresql version: 1.0.1 repository: "@mobi" alias: postgresql - name: oraclepdb version: 0.0.1 repository: "file://subcharts/oraclepdb" condition: oraclepdb.enabled

    然后你可以使用实践Chart dependencies通过helm dep updatehelm dep build将子图作为依赖来管理。

    this bug 不固定就不好看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2021-11-24
      • 2014-11-04
      • 2012-03-14
      • 1970-01-01
      • 2020-12-22
      相关资源
      最近更新 更多