舵有条件安装子图

时间:2019-01-04 04:05:26

标签: kubernetes-helm

是否有一种方法可以基于全局values.yaml有条件地安装头盔子图?我将所有内部服务和组件都作为子图表,其中之一是消息队列图表。在开发和测试环境(本地k8s)中,我使用RabbitMQ,而在过渡和产品(AKS)中,我使用Azure Service Bus。基于名称空间/values.yaml,我是否要安装rabbitmq。

P.S-我已经将所有组件创建为子图表,以便它们都成为单个发行版的一部分。

3 个答案:

答案 0 :(得分: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/*

Heml 3 不喜欢我将本地依赖项放在 charts/
此外,Helm dep up 需要权限才能将本地依赖项从您的子图表目录移动到 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。感谢你们,我很高兴部署!

答案 1 :(得分:1)

我找到了答案:

在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

答案 2 :(得分:0)

我建议将此(丑陋的)解决方法作为从@sgandonhttps://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不固定,它就不会很漂亮。