Helm Template
Chart.yaml
- metadata for helm template
- name
- version
- appversion
- dependancy
# Name of Chart.yaml --> `C` captial
apiVersion: v2 # Helm3 suppourt communicate with kube-api sever
name: website-qt # helm chart name
description: helm chart for qt website # description
type: application # db , Monitoring, RBAC
version: 0.1.0 # Helm chart template version - patch, minior and major
# Patch 0.1.0 - 0.1.1 , 2.1.0 - 2.1.1
# Minior 0.1.0 - 0.2.0 , 2.0.0 - 2.1.0
# Major 0.1.0 - 1.0.0, 1.0.0 - 2.0.0
appVersion: 1.16.0 # APP version or release tag version of app
dependancy:
- name: mysql
version: 12.0
repostry: @mysql
templates Click here Offical docs
- templates cantains all k8s manifests file
templates/*.yaml
templates:
pod
deployment
statefulset
demonset
job
RBAC -r and rb
service-account
pv
pvc..etc
helm-playground
## Values.yaml
appName: apache2
containers:
apache:
image: httpd
tag: 2.4.69
port: 80
initContainers:
downloadtemplate:
image: alpine
tag: latest
command:
[
"sh",
"-c",
"apk add --no-cache wget unzip && wget -O /tmp/templatemo_589_lugx_gaming.zip https://templatemo.com/tm-zip-files-2020/templatemo_589_lugx_gaming.zip && unzip /tmp/templatemo_589_lugx_gaming.zip -d /usr/local/apache2/htdocs/ && cp /usr/local/apache2/htdocs/templatemo_589_lugx_gaming/* /usr/local/apache2/htdocs/ && rm -rf /usr/local/apache2/htdocs/templatemo_589_lugx_gaming",
]
Deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.appName }}-deployment
labels:
app: {{ .Values.appName }}
spec:
replicas: 2
selector:
matchLabels:
app: {{ .Values.appName }}
strategy:
type: Recreate
template:
metadata:
labels:
app: {{ .Values.appName }}
spec:
initContainers:
- name: {{ .Values.appName }}-init-downloadtemplate
image: "{{ .Values.containers.initContainers.downloadtemplate.image }}:{{ .Values.containers.initContainers.downloadtemplate.tag }}"
command: {{ .Values.containers.initContainers.downloadtemplate.command }}
volumeMounts:
- name: {{ .Values.appName }}-html
mountPath: /usr/local/apache2/htdocs/
containers:
- name: {{ .Values.appName }}
image: "{{ .Values.containers.apache.image }}:{{ .Values.containers.apache.tag }}"
ports:
- containerPort: {{ .Values.containers.apache.port }}
volumeMounts:
- name: {{ .Values.appName }}-html
mountPath: /usr/local/apache2/htdocs/
volumes:
- name: {{ .Values.appName }}-html
emptyDir: {}
Values Types in Helm
- string – text
- Integer – number
- Float – decimal (1.0 , 0.5 )
- boolen – true or false
- null – nothing value
- list – many iteams like [ 80, 443] , [“dev”, “stg”]
- map – things with multiple names Grouping
image:
name: alpine
tag: latest
Checking and converting type in template
- Typeoff – {{ typeOf .Values.replicas }} # Int or flot
- convert to integer {{ .Values.replicas | int }}
- convert to string {{ .Values.replicas | toString }}
- text to number {{ “8080” | atoi }}
- {{ .Values.appname | quote }} – “”
- {{ .Values.appname | upper }} – captical case Aa – AA
- {{ .Values.appname | lower }} – captical case Aa – aa
Helm template logic
Functions
eq – equals (when values will match )
- EX:
{{ -eq .Values.env "prod" }}
replicas: {{ .Values.prod.replicas }}
{{ else }}
replicas: 1
{{ end }}
ne – not equal {{ -ne .Values.env “prod” }}
gt , Le, ge, lt
gt - greather then > 2
ge - greather or equal >= 2
lt - lessthen < 2
le -lessthen or equal <= 2
EX:
{{ if (gt (int .Values.replicas) 1) }}
replicas: {{ .Values.prod.replicas }}
{{ else }}
replicas: 1
{{ end }}
AND both true opertions need
EX:
{{ and .Values.enable -eq .Values.env “prod” }}
or either any one will be true
{{ or .Values.enable -eq .Values.env “prod” }}
not – Oppsite (condition not true)
{{ not .Values.enable }}
empty – it is null vlaue or empty
{{ empty .Values.nodeSelector }}
end end will close function or conditions
{{- end }}
if condition
EX:
nodeport:
enable: true
{{- if .Values.nodeport.enable }}
apiversion: newtworking.k8s.io/v1
kind: service
....
{{- end}}
if – else if – else
{{- if .Values.service.type "nodeport" }}
apiversion: newtworking.k8s.io/v1
kind: service
type: nodeport
...
{{- else if .Values.service.type "clusterip" }}
apiversion: newtworking.k8s.io/v1
kind: service
type: nodeport
...
{{- else }}
apiversion: newtworking.k8s.io/v1
kind: service
type: nodeport
{{- end}}
...
with – does check value is it empty and changes for vlaue .
nodeselector:
nodeType: dev
{{- with .Values.nodeselector }}
nodeselector:
{{- toyaml . | nindent 2 }}
{{- end }}
Task
- make your deploymet to helm template and try above operations.
- try install Grafana helm chart
