Skip to content

Commit bcef196

Browse files
feat(k8s): 🚀 Add Helm chart
Signed-off-by: Prashant Shahi <me@prashantshahi.dev>
1 parent 3b11d8e commit bcef196

File tree

9 files changed

+200
-0
lines changed

9 files changed

+200
-0
lines changed

helm/Chart.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: todo-flaskapp
2+
description: Helm Chart for ToDo FlaskApp with MongoDB
3+
version: 0.0.1
4+
apiVersion: v1
5+
keywords:
6+
- flaskapp
7+
sources:
8+
- https://github.com/prashant-shahi/ToDo-List-using-Flask-and-MongoDB
9+
- https://prashantshahi.dev
10+
home: https://github.com/prashant-shahi/ToDo-List-using-Flask-and-MongoDB

helm/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Helm Chart for ToDo-FlaskApp
2+
3+
This directory contains Helm chart for the ToDo-FlaskApp.

helm/templates/_helper.tpl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
3+
{{/*
4+
Expand the name of the chart.
5+
*/}}
6+
{{- define "flaskapp.name" -}}
7+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
8+
{{- end -}}
9+
10+
{{/*
11+
Return the proper flaskapp image name
12+
*/}}
13+
{{- define "flaskapp.image" -}}
14+
{{- $registryName := .Values.flaskapp.image.registry -}}
15+
{{- $repositoryName := .Values.flaskapp.image.repository -}}
16+
{{- $tag := .Values.flaskapp.image.tag | toString -}}
17+
{{- if $registryName -}}
18+
{{- printf "%s/%s:%s" $registryName $repositoryName $tag -}}
19+
{{- else -}}
20+
{{- printf "%s:%s" $repositoryName $tag -}}
21+
{{- end -}}
22+
{{- end -}}
23+
24+
{{/*
25+
Return the proper mongo image name
26+
*/}}
27+
{{- define "mongo.image" -}}
28+
{{- $registryName := .Values.mongo.image.registry -}}
29+
{{- $repositoryName := .Values.mongo.image.repository -}}
30+
{{- $tag := .Values.mongo.image.tag | toString -}}
31+
{{- if $registryName -}}
32+
{{- printf "%s/%s:%s" $registryName $repositoryName $tag -}}
33+
{{- else -}}
34+
{{- printf "%s:%s" $repositoryName $tag -}}
35+
{{- end -}}
36+
{{- end -}}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
6+
name: {{ .Values.flaskapp.name }}
7+
spec:
8+
accessModes:
9+
- ReadWriteOnce
10+
resources:
11+
requests:
12+
storage: 100Mi
13+
status: {}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: {{ .Values.mongo.name }}
6+
name: {{ .Values.mongo.name }}
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app.kubernetes.io/component: {{ .Values.mongo.name }}
12+
strategy:
13+
type: Recreate
14+
template:
15+
metadata:
16+
labels:
17+
app.kubernetes.io/component: {{ .Values.mongo.name }}
18+
spec:
19+
containers:
20+
- image: {{ template "mongo.image" . }}
21+
name: {{ .Values.mongo.name }}
22+
ports:
23+
- containerPort: {{ .Values.mongo.service.port }}
24+
resources: {}
25+
volumeMounts:
26+
- mountPath: /data/db/
27+
name: {{ .Values.flaskapp.name }}
28+
restartPolicy: Always
29+
volumes:
30+
- name: {{ .Values.flaskapp.name }}
31+
persistentVolumeClaim:
32+
claimName: {{ .Values.flaskapp.name }}
33+
status: {}

helm/templates/mongo-service.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: {{ .Values.mongo.name }}
6+
name: {{ .Values.mongo.name }}
7+
spec:
8+
ports:
9+
- name: "http"
10+
port: {{ .Values.mongo.service.port }}
11+
targetPort: {{ .Values.mongo.service.port }}
12+
protocol: TCP
13+
selector:
14+
app.kubernetes.io/component: {{ .Values.mongo.name }}
15+
type: {{ .Values.mongo.service.type }}
16+
status:
17+
loadBalancer: {}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
6+
name: {{ .Values.flaskapp.name }}
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
12+
strategy: {}
13+
template:
14+
metadata:
15+
labels:
16+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
17+
spec:
18+
initContainers:
19+
- name: {{ .Values.flaskapp.name }}-init
20+
image: {{ template "mongo.image" . }}
21+
imagePullPolicy: IfNotPresent
22+
env:
23+
- name: MONGO_HOST
24+
value: {{ .Values.mongo.name }}
25+
- name: MONGO_PORT
26+
value: {{ .Values.mongo.service.port | quote }}
27+
command:
28+
- sh
29+
- -c
30+
- until mongo --eval 'db.runCommand("ping").ok' ${MONGO_HOST}:${MONGO_PORT}/test --quiet; do echo -e "waiting for MongoDB"; sleep 5; done; echo -e "MongoDB ready, starting ToDo-FlaskApp now";
31+
containers:
32+
- name: {{ .Values.flaskapp.name }}
33+
image: {{ template "flaskapp.image" . }}
34+
env:
35+
- name: FLASK_ENV
36+
value: {{ .Values.flaskapp.env }}
37+
- name: MONGO_HOST
38+
value: {{ .Values.mongo.name }}
39+
- name: MONGO_PORT
40+
value: {{ .Values.mongo.service.port | quote }}
41+
- name: PORT
42+
value: {{ .Values.flaskapp.service.port | quote }}
43+
ports:
44+
- containerPort: {{ .Values.flaskapp.service.port }}
45+
resources: {}
46+
restartPolicy: Always
47+
status: {}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
6+
name: todo-flaskapp
7+
spec:
8+
ports:
9+
- name: "http"
10+
port: {{ .Values.flaskapp.service.port }}
11+
targetPort: {{ .Values.flaskapp.service.port }}
12+
protocol: TCP
13+
selector:
14+
app.kubernetes.io/component: {{ .Values.flaskapp.name }}
15+
type: {{ .Values.flaskapp.service.type }}
16+
status:
17+
loadBalancer: {}

helm/values.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
nameoverride: ""
2+
3+
mongo:
4+
name: mongo
5+
image:
6+
registry: docker.io
7+
repository: mvertes/alpine-mongo
8+
tag: latest
9+
imagePullPolicy: IfNotPresent
10+
service:
11+
type: ClusterIP
12+
port: 27017
13+
14+
flaskapp:
15+
name: todo-flaskapp
16+
env: production
17+
image:
18+
registry: docker.io
19+
repository: coolboi567/todo-flaskapp
20+
tag: latest
21+
imagePullPolicy: Always
22+
service:
23+
type: ClusterIP
24+
port: 5000

0 commit comments

Comments
 (0)