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

时间:2020-07-05 23:42:22

标签: kubernetes yaml kubernetes-helm

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

帮助安装演示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

deployment.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映射,但是错误仍然表明它们丢失了。为了使此功能按预期工作,我需要进行哪些更正?

7 个答案:

答案 0 :(得分:7)

我有一个类似的问题,但有相同的错误消息,但不完全相同。对我来说,问题似乎是在其中一个舵模板开始时的注释。看来掌舵人对此案处理得不好。当我将评论下移一点时,它起作用了。

答案 1 :(得分:2)

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

我的错误:我使用VS(Visual Studio)在模板内创建了一个附加文件'cronJob.yaml',并添加了我的内容...我认为头盔与OS-windows编码不兼容-某种程度上...希望对您有所帮助。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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

helm install webapi .

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我遇到了同样的问题。我在添加到模板文件夹的yml文件之一中缺少a中的apiVersion。错字,但值得检查。

答案 6 :(得分:0)

我有同样的错误信息。但是我的模板生成了损坏的输出。

我通过运行 first viewer helm template . 解决了这个问题。这生成了用于审查的输出。问题是 ---apiVersion: v2 位于生成的图表的顶部。三连字符 --- 不是有意使用的。

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

Helm Chart Template Fix

相关问题