Helm 3 chart install error: error validating data: apiVersion not set

问题描述 投票:0回答:12

我有一个简单的 helm chart,它将通过 docker desktop 将应用程序部署到我的本地 kubernetes 副本。如果我使用 kubectl 一次部署一个 yaml 文件,一切正常。但是,当我尝试创建一个 helm chart 以便于部署时,出现以下错误。

helm 安装演示 WebApi

错误:无法从发布清单构建 kubernetes 对象:错误验证“”:错误验证数据:未设置 apiVersion

错误似乎是说我在一个或多个 YAML 文件中缺少 apiVersion 映射。但是,我所有的文件似乎都有正确的 apiVersions。

文件夹结构

charts
└── WebApi
    ├── Chart.yaml
    └── templates
        ├── deployment.yaml
        ├── ingress.yaml
        └── services.yaml

Chart.yaml

apiVersion: v2
version: 0.1.0
name: WebApi
appVersion: "1.0"
description: A Helm Chart for WebApi
type: application

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-api
  labels:
    app: demo
    tier: demo-api
spec:
  selector:
    matchLabels:
      app: demo
  replicas: 3
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: demo/image
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              memory: "128Mi" #128 MB
              cpu: "200m" #200 millicpu (.2 cpu or 20% of the cpu)
          livenessProbe:
            httpGet:
              path: /swagger/index.html
              port: 80
            initialDelaySeconds: 15
            timeoutSeconds: 2
            periodSeconds: 5
            failureThreshold: 1
          readinessProbe:
            httpGet:
              path: /swagger/index.html
              port: 80

ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo
spec:
  rules:
    - host: demo.com
      http:
        paths:
          - backend:
              serviceName: demo
              servicePort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: demo
  labels:
    app: demo
spec:
  type: ClusterIP
  selector:
    app: demo
  ports:
    - name: http
      port: 80
      targetPort: 80

正如您所看到的,我所有的 YAML 文件都具有所需的 apiVersion 映射,但是错误仍然表示它们丢失了。我需要做哪些更正才能使其按预期工作?

kubernetes yaml kubernetes-helm
12个回答
38
投票

我有一个类似的问题,同样的错误信息,但不是完全一样的问题。对我来说,问题似乎是在其中一个 helm 模板开头的评论。看来 helm 没有很好地处理这种情况。当我将评论向下移动一点时它起作用了。


12
投票

我运行

helm install anyname1 . --dry-run --debug
并收到难以理解的错误消息。 然后我跑
helm template -f values.yaml . > deployChart.yaml
我在生成的文件中看到了一些奇怪的字符。

我的错误:我使用 VS(visual studio)在模板中创建了一个附加文件“cronJob.yaml”并添加了我的内容......我认为 helm 与 OS-windows 编码不兼容 - 不知何故 - 无论如何我希望这有帮助。

我的解决方案:我复制了一个现有文件,然后重命名它,然后粘贴我的内容。


6
投票

我有同样的错误信息。然而,我的模板生成了损坏的输出。

我通过运行第一次查看来解决这个问题

helm template .
这生成了输出以供审查。问题是
---apiVersion: v2
位于生成图表的顶部。三重连字符
---
不是故意的。

要修复,请在我生成的图表文件的底部将

{{- end -}}
更改为
{{ end }}
。这允许在多图表生成的模板上换行。


6
投票

在我的例子中,我在模板目录中添加了 .json 文件。
我运行了

helm template -f values.yaml . > deployChart.yaml
,发现json文件内容存在于
deployChart.yaml
中。

将 .json 文件移出模板目录可解决问题。


1
投票

我在使用 Azure DevSpaces(反过来使用 helm 进行工作负载部署)时遇到了这个错误。结果我的一些模板文件有 UTF-8 BOM,helm(在 DevSpaces 中)无法处理它,尽管本地安装的 helm 客户端能够很好地解析模板。我删除了 BOM 并解决了 DevSpaces 中的问题。


1
投票

对于我的案例,删除模板文件夹中的自述文件解决了问题。


0
投票

我遇到了同样的问题。我在添加到模板文件夹的 yml 文件之一中缺少

a
中的
apiVersion
。打字错误但值得检查。


0
投票

我附上了图书馆图表。 Helm 创建了导致错误的 Chart.lock 文件。

解决方案: 使用以下命令在图表目录中创建 .helmignore 文件:

Chart.lock

0
投票

测试!

$ helm create k8s-helm

$ helm lint k8s-helm/
==> Linting k8s-helm/
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

$ kubectl apply -f k8s-helm/ --dry-run=client
error validating "k8s-helm/Chart.yaml": error validating data: kind not set; if you choose to ignore these errors, turn validation off with --validate=false
error validating "k8s-helm/values.yaml": error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false

Linter 没有发现任何错误,但验证存在问题。怎么样?

头盔发射!

$ helm install --debug --dry-run test-app k8s-helm/

0
投票

请查看charts->template path下的NOTES.txt文件。 解决方案:文件名区分大小写,不应该以 Notes.txt 的形式提供,大写字母是必须的,因为 helm 将尝试解释该文件并尝试为 kubernetes 生成对象。


0
投票

所有不是 yaml 清单的模板都应该以

underscore
字符开头

Most files in templates/ are treated as if they contain Kubernetes manifests

The NOTES.txt is one exception

But files whose name begins with an underscore (_) are assumed to not have a manifest inside. These files are not rendered to Kubernetes object definitions, but are available everywhere within other chart templates for use.

https://helm.sh/docs/chart_template_guide/named_templates/#partials-and-_-files


-4
投票

错误:无法从发布清单构建 kubernetes 对象:错误 验证“”:错误验证数据:未设置 apiVersion

此错误表示安装命令是从错误的目录执行的或提供了错误的图表路径。

为了安装它,您必须从

Chart.yaml
所在的目录执行,或者在
helm install
命令中提供该目录的路径作为参数,例如
WebApi
目录:

helm install webapi .
© www.soinside.com 2019 - 2024. All rights reserved.