diff --git a/charts/donetick/Chart.yaml b/charts/donetick/Chart.yaml new file mode 100644 index 0000000..36d74f5 --- /dev/null +++ b/charts/donetick/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: donetick +description: A Helm chart for Donetick application +type: application +version: 0.1.0 +appVersion: "latest" \ No newline at end of file diff --git a/charts/donetick/templates/_helpers.tpl b/charts/donetick/templates/_helpers.tpl new file mode 100644 index 0000000..beb9391 --- /dev/null +++ b/charts/donetick/templates/_helpers.tpl @@ -0,0 +1,45 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "donetick.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +*/}} +{{- define "donetick.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- printf "%s" $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "donetick.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "donetick.labels" -}} +helm.sh/chart: {{ include "donetick.chart" . }} +{{ include "donetick.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "donetick.selectorLabels" -}} +app.kubernetes.io/name: {{ include "donetick.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/charts/donetick/templates/configmap.yaml b/charts/donetick/templates/configmap.yaml new file mode 100644 index 0000000..c2ba05d --- /dev/null +++ b/charts/donetick/templates/configmap.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "donetick.fullname" . }}-config + labels: + {{- include "donetick.labels" . | nindent 4 }} +data: {} diff --git a/charts/donetick/templates/deployment.yaml b/charts/donetick/templates/deployment.yaml new file mode 100644 index 0000000..98ff472 --- /dev/null +++ b/charts/donetick/templates/deployment.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "donetick.fullname" . }} + labels: + {{- include "donetick.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "donetick.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "donetick.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["/donetick-core"] + ports: + - name: http + containerPort: 8000 + protocol: TCP + envFrom: + - configMapRef: + name: {{ include "donetick.fullname" . }}-config + env: + {{- range .Values.env }} + - name: {{ .name }} + value: {{ .value | quote }} + {{- end }} + volumeMounts: + - name: data + mountPath: /usr/src/app/data + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumes: + - name: data + persistentVolumeClaim: + claimName: {{ include "donetick.fullname" . }}-data \ No newline at end of file diff --git a/charts/donetick/templates/ingress.yaml b/charts/donetick/templates/ingress.yaml new file mode 100644 index 0000000..247b365 --- /dev/null +++ b/charts/donetick/templates/ingress.yaml @@ -0,0 +1,40 @@ +{{- if .Values.ingress.enabled -}} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "donetick.fullname" . }} + labels: + {{- include "donetick.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + pathType: {{ .pathType }} + backend: + service: + name: {{ include "donetick.fullname" $ }} + port: + number: {{ $.Values.service.port }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/donetick/templates/pvc.yaml b/charts/donetick/templates/pvc.yaml new file mode 100644 index 0000000..d7fddd0 --- /dev/null +++ b/charts/donetick/templates/pvc.yaml @@ -0,0 +1,17 @@ +{{- if .Values.persistence.enabled }} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "donetick.fullname" . }}-data + labels: + {{- include "donetick.labels" . | nindent 4 }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + {{- if .Values.persistence.storageClass }} + storageClassName: {{ .Values.persistence.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- end }} \ No newline at end of file diff --git a/charts/donetick/templates/service.yaml b/charts/donetick/templates/service.yaml new file mode 100644 index 0000000..c04d7eb --- /dev/null +++ b/charts/donetick/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "donetick.fullname" . }} + labels: + {{- include "donetick.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "donetick.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/charts/donetick/values.yaml b/charts/donetick/values.yaml new file mode 100644 index 0000000..cbc4d04 --- /dev/null +++ b/charts/donetick/values.yaml @@ -0,0 +1,45 @@ +image: + repository: donetick/donetick + tag: latest + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: "" + +replicaCount: 1 + +service: + type: ClusterIP + port: 8000 + +ingress: + enabled: true + className: "traefik" + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + hosts: + - host: donetick.example.com + paths: + - path: / + pathType: Prefix + tls: + - hosts: + - donetick.example.com + +persistence: + enabled: true + storageClass: "longhorn" + accessMode: ReadWriteOnce + size: 1Gi + +env: + - name: DT_ENV + value: prod + +resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 100m + memory: 128Mi \ No newline at end of file