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?