Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 715
Dblock247 Avatar asked Jul 05 '20 23:07

Dblock247


2 Answers

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.

like image 158
tom Avatar answered Sep 23 '22 21:09

tom


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.

like image 45
ERai Avatar answered Sep 21 '22 21:09

ERai