Helm 3 图表安装错误:验证数据时出错:未设置 apiVersion

Dbl*_*247 3 yaml kubernetes kubernetes-helm

我有一个简单的 helm chart,它将通过 docker 桌面将应用程序部署到我的本地 kubernetes 副本。如果我使用 kubectl 一次部署一个 yaml 文件,则一切正常。但是,当我尝试创建舵图以更轻松地部署时,我收到以下错误。

helm 安装演示 WebApi

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

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

文件夹结构

charts
??? WebApi
    ??? Chart.yaml
    ??? templates
        ??? deployment.yaml
        ??? ingress.yaml
        ??? services.yaml
Run Code Online (Sandbox Code Playgroud)

图表文件

charts
??? WebApi
    ??? Chart.yaml
    ??? templates
        ??? deployment.yaml
        ??? ingress.yaml
        ??? services.yaml
Run Code Online (Sandbox Code Playgroud)

部署.yaml

apiVersion: v2
version: 0.1.0
name: WebApi
appVersion: "1.0"
description: A Helm Chart for WebApi
type: application
Run Code Online (Sandbox Code Playgroud)

入口.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
Run Code Online (Sandbox Code Playgroud)

服务.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo
spec:
  rules:
    - host: demo.com
      http:
        paths:
          - backend:
              serviceName: demo
              servicePort: 80
Run Code Online (Sandbox Code Playgroud)

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

tom*_*tom 18

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

  • 我确认这也是我的解决方案。无论是谁在这件事上投了反对票,都应该解释清楚。 (2认同)

小智 9

就我而言,我在模板目录中添加 .json 文件。
我运行helm template -f values.yaml . > deployChart.yaml并发现 json 文件内容存在于deployChart.yaml.

将 .json 文件移到模板目录之外可以解决该问题。

  • 谢谢,这至少对我来说是正确的答案。 (3认同)

小智 6

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

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

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


Ste*_*lum 6

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

我通过运行第一次查看来解决这个问题,helm template .这生成了供审查的输出。问题---apiVersion: v2出在生成的图表的顶部。三重连字符---不是有意的。

要解决此问题,请更改{{- end -}}{{ end }}我生成的图表文件的底部。这允许在多图表生成的模板上进行换行。

Helm 图表模板修复


Mar*_* K. -5

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

此错误意味着安装命令是从错误的目录执行的,或者提供了错误的图表路径。

为了安装它,您必须从Chart.yaml放置的目录执行或提供该目录的路径作为helm install命令中的参数,例如来自WebApi目录:

helm install webapi .
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么这是答案。如果 helm 从错误的文件夹运行,则会出现错误“错误:Chart.yaml 文件丢失” (10认同)