带有Requirements.yaml的舵图,未找到本地图

时间:2019-02-19 16:15:48

标签: kubernetes-helm

我的图表具有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

当我执行hep 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,我也将版本更改为图表版本,这是行不通的。

这是正式文件:https://github.com/helm/helm/blob/master/docs/helm/helm_dependency.md https://docs.helm.sh/chart_best_practices/#repository-urls

这是掌舵版本

$ 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文件夹中,但是如果我这样做,舵将在同一图表中安装mongodb和elasticsearch,这是不期望的,我期望的是在相同名称空间下三个图表:myproj,elasticsearch,mongodb。

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

5 个答案:

答案 0 :(得分:5)

helm dep update

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

删除存储库

答案 1 :(得分:1)

  

...我期望在同一名称空间下有三个图表:myproj,elasticsearch和mongodb。

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


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会将它们复制到那里。

答案 2 :(得分:1)

您必须运行let arr = [1, 2, 3, 4]; let newArr = []; arr.reduce((prev, current) => {newArr.push(prev+current); return prev + current}, 0); console.log(newArr);。这会将子图放入./charts文件夹并创建./requirements.lock文件。然后即可安装。

答案 3 :(得分:1)

使用 Helm 版本 v3.4.1。

我遇到了这个错误。

我的解决方案是:

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

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

答案 4 :(得分:0)

helm dep update <name_of_folder_where_chart.yaml_is>

一旦在下面运行,将显示输出:-

Saving 1 charts
Deleting outdated charts

现在,您可以使用

在本地运行图表
helm template <path_to_chart.yaml>