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

14,824

Solution 1

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: apiVersion not set

This error means that the installation command was executed from wrong directory or wrong path to chart has been provided.

In order to install it, you have to either execute from the directory where Chart.yaml is placed or provide the path to this directory as an argument in helm install command, example from WebApi directory:

helm install webapi .

Solution 2

I had a similar problem with the same error message, but not exactly the same problem. The problem for me seems to have been a comment at the start of one of the helm templates. It seems helm did not handle this case well. When i moved the comment down a bit it worked.

Solution 3

I run helm install anyname1 . --dry-run --debug and got incomprehensible error messages. then I run helm template -f values.yaml . > deployChart.yaml and I saw some strange characters in the generated file.

My error: I created an additional file 'cronJob.yaml' inside templates using VS (visual studio) and added my content... I presume helm is not compatible -somehow- with the OS-windows encoding... anyways I hope this helps.

My solution: I copied an existing file, then renamed it and then I pasted my content.

Solution 4

I had same error message. However my templates were generating broken output.

I fixed this by running first viewing helm template . This generated the output for review. The problem was ---apiVersion: v2 was at the top of the generated chart. The triple hyphens --- are not intended.

To fix, changing {{- end -}} to {{ end }} at the bottom of my generated charts files. This allows for line breaks on multi-chart generated templates.

Helm Chart Template Fix

Solution 5

In my case, I was adding .json file inside template directory.
I ran helm template -f values.yaml . > deployChart.yaml and found that json file content present in deployChart.yaml.

Moving .json file outside of template directory resolve the issue.

Share:
14,824
Dblock247
Author by

Dblock247

Updated on July 21, 2022

Comments

  • Dblock247
    Dblock247 almost 2 years

    I have a simple helm chart that will deploy an application to my local copy of kubernetes via docker desktop. If I use kubectl to deploy the yaml one file at a time things work correctly. However, when I try to create a helm chart for easier deployments I get the following error.

    helm install demo WebApi

    Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: apiVersion not set

    The error seems to be saying that I am missing an apiVersion map in one or more of my YAML files. However, all of my files have what seems to be the correct apiVersions.

    Folder Structure

    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
    

    As you can see all of my YAML files have the required apiVersion map however the error still says they are missing. What corrections do I need to make in order for this to work as intended?