【问题标题】:helm chart with requirements.yaml, did not find local chartshelm chart 与 requirements.yaml,没有找到本地图表
【发布时间】:2021-04-25 23:14:14
【问题描述】:

我的图表有 elasticsearch 和 mongdb 依赖,在我的图表中,结构是这样的:

├── [-rw-rw-r--]  Chart.yaml
├── [drwxrwxr-x]  dependency_charts
│   ├── [drwxrwxr-x]  elasticsearch
│   └── [drwxrwxr-x]  mongodb
├── [-rw-rw-r--]  deploy.sh
├── [-rw-rw-r--]  requirements.yaml
├── [-rw-rw-r--]  values.yaml
├── [drwxrwxr-x]  templates
│   ├── [-rw-rw-r--]  proj-deploy.yaml
│   └── [-rw-rw-r--]  proj-svc.yaml

但是当我尝试安装我的图表时,它会说:

Error: found in requirements.yaml, but missing in charts/ directory: elasticsearch, mongodb

当我执行 helm dep ls 时,它显示状态缺失

$ helm dep list
NAME            VERSION REPOSITORY                              STATUS
elasticsearch   6.5.1   file://dependency_charts/elasticsearch  missing
mongodb         4.0.3   file://dependency_charts/mongodb        missing

版本是appVersion,我也改成chart版本了,不行。

这是官方文档:https://github.com/helm/helm/blob/master/docs/helm/helm_dependency.md https://docs.helm.sh/chart_best_practices/#repository-urls

这是 helm 版本

$ helm version
Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}

我可以将这些图表放到charts 文件夹中,但是如果我这样做,helm 会将 mongodb 和 elasticsearch 安装在同一个图表中,这是意料之中的,我期望在同一个命名空间下有三个图表:myproj、elasticsearch、mongodb。

有人知道我做错了什么吗? 谢谢。

【问题讨论】:

  • 使用 requirements.yaml,对于 elasticsearch 和 mongodb,它们已经以图表形式存在
  • @c4f4t0r,感谢您的回答,目前我不想从外部环境中提取图表,我想使用本地图表。你对此有什么想法吗?
  • 对不起外部链接docs.helm.sh/developing_charts
  • @c4f4t0r,谢谢,我已经看过那个页面了,官方文档也可以在这里找到docs.helm.sh/chart_best_practices/#repository-urls,所以我试着找出我的操作有什么问题

标签: kubernetes-helm


【解决方案1】:

你必须运行helm dep update。这会将子图表放入 ./charts 文件夹并创建 ./requirements.lock 文件。然后就可以安装了。

【讨论】:

    【解决方案2】:
    helm dep update
    

    仅在 repo 列表为空时有效。检查 helm repo list ,如果返回某些内容,则本地依赖项将无法解决。尝试使用命令 helm repo remove REPO_NAME 删除存储库

    【讨论】:

      【解决方案3】:

      使用 Helm 版本 v3.4.1。

      我遇到了这个错误。

      我的解决方案是:

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

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

      **

      这不是我的发现。

      **

      我从@sgandon 和@Narayana 那里读到了这篇文章:

      Post about conditionally deploying helm charts

      记录了错误#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-2.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
      

      【讨论】:

      • 这件事发生在我身上,因为我使用 sudo 运行了一个帮助命令。我不得不删除 tmpcharts 来解决这个问题。无需重命名等。
      【解决方案4】:

      ...我期待的是在同一个命名空间下有三个图表:myproj、elasticsearch、mongodb。

      您需要分别运行 helm install 三次才能获得该效果。


      requirements.yaml 机制导致 Helm 在单个 Helm 版本中安装多个子图表。 helm list 只会显示 myproj,但在内部它也有其他组件的 Kubernetes 资源。如果您是 kubectl get service,那么您会看到像 unusual-animal-myprojunusual-animal-mongodb 这样的服务对象,它们由同一个 Helm 版本管理。如果你helm del unusual-animal,它会将所有三个组件一起删除。

      如果这是您想要的行为,那么您收到的错误消息就是它所说的:本地图表必须位于完全命名为 charts 的子目录中。运行 helm dep uphelm dep build 会将它们复制到那里。

      【讨论】:

      • 谢谢你的解释,我明白了,helm install 不能在同一个命名空间中安装多个图表。正如你所说,在我安装 myproj 之后,服务名称和 pod 名称都有 unusual-animal- 前缀。而且您提到本地图表必须在一个完全命名为charts 的子目录中,但是为什么文档以repository: "file://../dependency_chart/nginx" 为例,是拼写错误吗?而我将requirements.yaml修改为repository: "file://./charts/elasticsearch"后,helm dep ls show unpacked status,是不是?
      【解决方案5】:
      helm dep update <name_of_folder_where_chart.yaml_is>
      

      一旦你在上面运行,下面将是输出:-

      Saving 1 charts
      Deleting outdated charts
      

      现在,您可以使用在本地运行图表

      helm template <path_to_chart.yaml> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-05
        • 2018-09-09
        • 1970-01-01
        • 2018-08-31
        • 2018-04-15
        相关资源
        最近更新 更多