From 0372b5269b42cb1233bc1aa1e9066bf7b26215c2 Mon Sep 17 00:00:00 2001 From: David Burke Date: Wed, 2 Jun 2021 19:43:08 -0400 Subject: [PATCH] Based on django helm chart now --- .gitlab-ci.yml | 7 +- .gitmodules | 3 + Chart.lock | 6 +- Chart.yaml | 2 +- README.md | 12 ++- charts/postgresql-10.3.17.tgz | Bin 48320 -> 0 bytes charts/postgresql-10.3.18.tgz | Bin 0 -> 48323 bytes django-helm-chart | 1 + templates | 1 + templates/NOTES.txt | 21 ----- templates/_helpers.tpl | 123 --------------------------- templates/beat/deployment.yaml | 65 -------------- templates/configmap.yaml | 12 --- templates/pre-install-job.yaml | 32 ------- templates/secrets.yaml | 17 ---- templates/serviceaccount.yaml | 12 --- templates/tests/test-connection.yaml | 15 ---- templates/web/deployment.yaml | 95 --------------------- templates/web/hpa.yaml | 28 ------ templates/web/ingress.yaml | 41 --------- templates/web/pdb.yaml | 16 ---- templates/web/service.yaml | 16 ---- templates/worker/deployment.yaml | 72 ---------------- templates/worker/hpa.yaml | 28 ------ values-sample.yaml | 18 ---- values.yaml | 35 ++++---- 26 files changed, 42 insertions(+), 636 deletions(-) create mode 100644 .gitmodules delete mode 100644 charts/postgresql-10.3.17.tgz create mode 100644 charts/postgresql-10.3.18.tgz create mode 160000 django-helm-chart create mode 120000 templates delete mode 100644 templates/NOTES.txt delete mode 100644 templates/_helpers.tpl delete mode 100644 templates/beat/deployment.yaml delete mode 100644 templates/configmap.yaml delete mode 100644 templates/pre-install-job.yaml delete mode 100644 templates/secrets.yaml delete mode 100644 templates/serviceaccount.yaml delete mode 100644 templates/tests/test-connection.yaml delete mode 100644 templates/web/deployment.yaml delete mode 100644 templates/web/hpa.yaml delete mode 100644 templates/web/ingress.yaml delete mode 100644 templates/web/pdb.yaml delete mode 100644 templates/web/service.yaml delete mode 100644 templates/worker/deployment.yaml delete mode 100644 templates/worker/hpa.yaml delete mode 100644 values-sample.yaml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f305358..81d3111 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,12 @@ image: - name: alpine/helm:3.2.4 + name: alpine/helm:3.5.4 entrypoint: ["/bin/sh", "-c"] +lint: + stage: test + script: + - helm lint + pages: stage: deploy script: diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1ad4fb4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "django-helm-chart"] + path = django-helm-chart + url = https://gitlab.com/burke-software/django-helm-chart.git diff --git a/Chart.lock b/Chart.lock index c28449f..f8204ef 100644 --- a/Chart.lock +++ b/Chart.lock @@ -1,9 +1,9 @@ dependencies: - name: postgresql repository: https://charts.bitnami.com/bitnami - version: 10.3.17 + version: 10.3.18 - name: redis repository: https://charts.bitnami.com/bitnami version: 14.2.1 -digest: sha256:c5651d0fd8c10cf2abbb22bbc1f6f118ea2d6171110919e66ec5e76740beb1f2 -generated: "2021-05-29T11:58:09.458243021-04:00" +digest: sha256:659bf9e0d61fd9cd5aba565660a7cbb9e877a85b0a7f2d14d41b4ed52a0623a2 +generated: "2021-06-02T19:30:50.105366356-04:00" diff --git a/Chart.yaml b/Chart.yaml index 966ae68..0e702da 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -22,7 +22,7 @@ appVersion: 1.0.0 dependencies: - name: postgresql - version: 10.3.17 + version: ~10.3.17 repository: https://charts.bitnami.com/bitnami condition: postgresql.enabled - name: redis diff --git a/README.md b/README.md index 7e5b512..a58110f 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,16 @@ We use this chart internally. However it's not fully documented yet nor tested in a wide range of scenarios. If you are a helm and kubernetes expert - feel free to use this and help contribute to this repo. +Based on https://gitlab.com/burke-software/django-helm-chart/ + # Usage 1. Add our Helm chart repo `helm repo add glitchtip https://glitchtip.gitlab.io/glitchtip-helm-chart/` -2. Review our values.yaml. At a minimum you'll need to set databaseURL and secretKey. -3. Install the chart `helm install glitchtip/glitchtip --set databaseURL=your_db --set secretKey=random_string` +2. Review our values.yaml. At a minimum you'll need to set env.secret.DATABASE_URL and SECRET_KEY. +3. Install the chart `helm install glitchtip/glitchtip` + +# Tips + +- Use [helm diff](https://github.com/databus23/helm-diff) to preview changes +- We don't version this chart at this time +- Set image.tag to the GlitchTip version you wish to install diff --git a/charts/postgresql-10.3.17.tgz b/charts/postgresql-10.3.17.tgz deleted file mode 100644 index 2f71763ac7f6eb0f0fd3241597bc1c99266ed623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48320 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 JIrjjp1pu(2T~h!6 diff --git a/charts/postgresql-10.3.18.tgz b/charts/postgresql-10.3.18.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1794214e422e4235dd10987fd317b0324bc7b03d GIT binary patch literal 48323 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 DO~%NX literal 0 HcmV?d00001 diff --git a/django-helm-chart b/django-helm-chart new file mode 160000 index 0000000..51a5f0e --- /dev/null +++ b/django-helm-chart @@ -0,0 +1 @@ +Subproject commit 51a5f0e2761bfbfe24f0c0dd16fc6dbdff9e0547 diff --git a/templates b/templates new file mode 120000 index 0000000..c88d416 --- /dev/null +++ b/templates @@ -0,0 +1 @@ +django-helm-chart/templates/ \ No newline at end of file diff --git a/templates/NOTES.txt b/templates/NOTES.txt deleted file mode 100644 index 2fddc9e..0000000 --- a/templates/NOTES.txt +++ /dev/null @@ -1,21 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.web.ingress.enabled }} -{{- range $host := .Values.web.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.web.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.web.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "django.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.web.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "django.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "django.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.web.service.port }} -{{- else if contains "ClusterIP" .Values.web.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "django.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 -{{- end }} diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl deleted file mode 100644 index 2734712..0000000 --- a/templates/_helpers.tpl +++ /dev/null @@ -1,123 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "django.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "django.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "django.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Common labels -*/}} -{{- define "django.labels" -}} -helm.sh/chart: {{ include "django.chart" . }} -{{ include "django.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} - -{{/* -Selector labels -*/}} -{{- define "django.selectorLabels" -}} -app.kubernetes.io/name: {{ include "django.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end -}} - -{{/* -Create the name of the service account to use -*/}} -{{- define "django.serviceAccountName" -}} -{{- if .Values.serviceAccount.create -}} - {{ default (include "django.fullname" .) .Values.serviceAccount.name }} -{{- else -}} - {{ default "default" .Values.serviceAccount.name }} -{{- end -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -*/}} -{{- define "django.postgresql.fullname" -}} -{{- if .Values.postgresql.fullnameOverride -}} -{{- .Values.postgresql.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.postgresql.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name "django-postgresql" | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} -{{- define "django.redis.fullname" -}} -{{- if .Values.redis.fullnameOverride -}} -{{- .Values.redis.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.redis.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name "django-redis" | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - -{{/* -Set redis host -*/}} -{{- define "django.redis.host" -}} -{{- if .Values.redis.enabled -}} -{{- template "django.redis.fullname" . -}}-redis-master -{{- else -}} -{{- .Values.redis.host | quote -}} -{{- end -}} -{{- end -}} - -{{/* -Set redis url -*/}} -{{- define "django.redis.url" -}} -{{- if .Values.redis.enabled -}} -redis://{{- template "django.redis.password" -}}{{- template "django.redis.fullname" . -}}-master -{{- end -}} -{{- end -}} - -{{/* -Set redis port -*/}} -{{- define "django.redis.port" -}} -{{- if .Values.redis.enabled -}} - "6379" -{{- else -}} -{{- default "6379" .Values.redis.port | quote -}} -{{- end -}} -{{- end -}} diff --git a/templates/beat/deployment.yaml b/templates/beat/deployment.yaml deleted file mode 100644 index 5a15e24..0000000 --- a/templates/beat/deployment.yaml +++ /dev/null @@ -1,65 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "django.fullname" . }}-beat - labels: - {{- include "django.labels" . | nindent 4 }} - app.kubernetes.io/component: beat -spec: - replicas: 1 - selector: - matchLabels: - {{- include "django.selectorLabels" . | nindent 6 }} - app.kubernetes.io/component: beat - template: - metadata: - annotations: - checksum/secret: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }} - checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} - tag: "{{ .Values.image.tag }}" - labels: - {{- include "django.selectorLabels" . | nindent 8 }} - app.kubernetes.io/component: beat - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - resources: - limits: - cpu: 50m - memory: 96Mi - requests: - cpu: 1m - memory: 32Mi - env: - - name: SERVER_ROLE - value: "beat" - {{- if .Values.redisURL }} - - name: REDIS_URL - value: {{ .Values.redisURL }} - {{- end }} - {{- if .Values.redis.enabled }} - - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - key: redis-password - name: {{ include "django.fullname" . }}-redis - - name: REDIS_HOST - value: {{ template "django.redis.host" . }} - - name: REDIS_PORT - value: {{ template "django.redis.port" . }} - {{- end }} - envFrom: - - secretRef: - name: {{ include "django.fullname" . }} - - configMapRef: - name: {{ include "django.fullname" . }} diff --git a/templates/configmap.yaml b/templates/configmap.yaml deleted file mode 100644 index 6b57ab6..0000000 --- a/templates/configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ include "django.fullname" . }} - labels: - {{- include "django.labels" . | nindent 4 }} - annotations: - "helm.sh/hook-weight": "-1" -data: -{{- range $k, $v := .Values.environmentVariables }} - {{ $k }}: {{ $v | quote }} -{{- end }} diff --git a/templates/pre-install-job.yaml b/templates/pre-install-job.yaml deleted file mode 100644 index e539a9e..0000000 --- a/templates/pre-install-job.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "django.fullname" . }} - labels: - {{- include "django.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": post-install,pre-upgrade - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded - "helm.sh/hook-weight": "0" - checksum/secret: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }} - checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} - tag: "{{ .Values.image.tag }}" -spec: - activeDeadlineSeconds: 600 - template: - spec: - restartPolicy: Never - containers: - - name: pre-install-job - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: ["./manage.py","migrate"] - env: - - name: DEBUG - value: "False" - - name: STATIC_URL - value: / - - name: DATABASE_URL - value: {{ required "databaseURL is a required value." .Values.databaseURL }} - - name: SECRET_KEY - value: {{ required "secretKey is a required value." .Values.secretKey }} diff --git a/templates/secrets.yaml b/templates/secrets.yaml deleted file mode 100644 index 505738f..0000000 --- a/templates/secrets.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "django.fullname" . }} - labels: - {{- include "django.labels" . | nindent 4 }} -type: Opaque -data: - DATABASE_URL: {{ required "databaseURL is a required value." .Values.databaseURL | b64enc | quote }} - SECRET_KEY: {{ required "secretKey is a required value." .Values.secretKey | b64enc | quote }} - REDIS_URL: {{ printf "redis://:@glitchtip-staging-redis-master:6379/0" | b64enc | quote }} -{{- if .Values.stripeLiveSecretKey }} - STRIPE_LIVE_SECRET_KEY: {{ .Values.stripeLiveSecretKey | b64enc | quote }} -{{- end }} -{{- if .Values.djstripeWebhookSecret }} - DJSTRIPE_WEBHOOK_SECRET: {{ .Values.djstripeWebhookSecret | b64enc | quote }} -{{- end }} diff --git a/templates/serviceaccount.yaml b/templates/serviceaccount.yaml deleted file mode 100644 index c686c91..0000000 --- a/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "django.serviceAccountName" . }} - labels: - {{- include "django.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/templates/tests/test-connection.yaml b/templates/tests/test-connection.yaml deleted file mode 100644 index e3023e4..0000000 --- a/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "django.fullname" . }}-test-connection" - labels: -{{ include "django.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "django.fullname" . }}:{{ .Values.web.service.port }}'] - restartPolicy: Never diff --git a/templates/web/deployment.yaml b/templates/web/deployment.yaml deleted file mode 100644 index 8d109d3..0000000 --- a/templates/web/deployment.yaml +++ /dev/null @@ -1,95 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "django.fullname" . }}-web - labels: - {{- include "django.labels" . | nindent 4 }} - app.kubernetes.io/component: web -spec: - {{- if not .Values.web.autoscaling.enabled }} - replicas: {{ .Values.web.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "django.selectorLabels" . | nindent 6 }} - app.kubernetes.io/component: web - template: - metadata: - annotations: - checksum/secret: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }} - checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} - tag: "{{ .Values.image.tag }}" - labels: - {{- include "django.selectorLabels" . | nindent 8 }} - app.kubernetes.io/component: web - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "django.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - failureThreshold: {{ .Values.web.livenessProbe.failureThreshold }} - httpGet: - path: /_health/ - port: 8080 - initialDelaySeconds: {{ .Values.web.livenessProbe.initialDelaySeconds }} - timeoutSeconds: {{ .Values.web.livenessProbe.timeoutSeconds }} - readinessProbe: - failureThreshold: {{ .Values.web.readinessProbe.failureThreshold }} - httpGet: - path: /_health/ - port: 8080 - initialDelaySeconds: {{ .Values.web.readinessProbe.initialDelaySeconds }} - timeoutSeconds: {{ .Values.web.readinessProbe.timeoutSeconds }} - resources: - {{- toYaml .Values.web.resources | nindent 12 }} - env: - {{- if .Values.redisURL }} - - name: REDIS_URL - value: {{ .Values.redisURL }} - {{- end }} - {{- if .Values.redis.enabled }} - - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - key: redis-password - name: {{ include "django.fullname" . }}-redis - - name: REDIS_HOST - value: {{ template "django.redis.host" . }} - - name: REDIS_PORT - value: {{ template "django.redis.port" . }} - {{- end }} - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - envFrom: - - secretRef: - name: {{ include "django.fullname" . }} - - configMapRef: - name: {{ include "django.fullname" . }} - {{- with .Values.web.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.web.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.web.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/templates/web/hpa.yaml b/templates/web/hpa.yaml deleted file mode 100644 index a3cfffe..0000000 --- a/templates/web/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.web.autoscaling.enabled -}} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ template "django.fullname" . }}-web - labels: - {{- include "django.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ template "django.fullname" . }}-web - minReplicas: {{ .Values.web.autoscaling.minReplicas }} - maxReplicas: {{ .Values.web.autoscaling.maxReplicas }} - metrics: - {{- if .Values.web.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.web.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.web.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.web.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/templates/web/ingress.yaml b/templates/web/ingress.yaml deleted file mode 100644 index 3f9860d..0000000 --- a/templates/web/ingress.yaml +++ /dev/null @@ -1,41 +0,0 @@ -{{- if .Values.web.ingress.enabled -}} -{{- $fullName := include "django.fullname" . -}} -{{- $svcPort := .Values.web.service.port -}} -{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "django.labels" . | nindent 4 }} - {{- with .Values.web.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if .Values.web.ingress.tls }} - tls: - {{- range .Values.web.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.web.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - backend: - serviceName: {{ $fullName }}-web - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} diff --git a/templates/web/pdb.yaml b/templates/web/pdb.yaml deleted file mode 100644 index e0376b2..0000000 --- a/templates/web/pdb.yaml +++ /dev/null @@ -1,16 +0,0 @@ -{{- if .Values.web.budget -}} -{{- if .Values.web.budget.minAvailable -}} -apiVersion: policy/v1beta1 -kind: PodDisruptionBudget -metadata: - name: {{ include "django.fullname" . }}-web - labels: - {{- include "django.labels" . | nindent 4 }} -spec: - minAvailable: {{ .Values.web.budget.minAvailable }} - selector: - matchLabels: - {{- include "django.selectorLabels" . | nindent 6 }} - app.kubernetes.io/component: web -{{- end -}} -{{- end -}} diff --git a/templates/web/service.yaml b/templates/web/service.yaml deleted file mode 100644 index 8eb3fc5..0000000 --- a/templates/web/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "django.fullname" . }}-web - labels: - {{- include "django.labels" . | nindent 4 }} -spec: - type: {{ .Values.web.service.type }} - ports: - - port: {{ .Values.web.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "django.selectorLabels" . | nindent 4 }} - app.kubernetes.io/component: web \ No newline at end of file diff --git a/templates/worker/deployment.yaml b/templates/worker/deployment.yaml deleted file mode 100644 index f114446..0000000 --- a/templates/worker/deployment.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "django.fullname" . }}-worker - labels: - {{- include "django.labels" . | nindent 4 }} - app.kubernetes.io/component: worker -spec: - replicas: {{ .Values.worker.replicaCount }} - selector: - matchLabels: - {{- include "django.selectorLabels" . | nindent 6 }} - app.kubernetes.io/component: worker - template: - metadata: - annotations: - checksum/secret: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }} - checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} - tag: "{{ .Values.image.tag }}" - labels: - {{- include "django.selectorLabels" . | nindent 8 }} - app.kubernetes.io/component: worker - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - resources: - {{- toYaml .Values.worker.resources | nindent 12 }} - env: - - name: SERVER_ROLE - value: "worker" - {{- if .Values.redisURL }} - - name: REDIS_URL - value: {{ .Values.redisURL }} - {{- end }} - {{- if .Values.redis.enabled }} - - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - key: redis-password - name: {{ include "django.fullname" . }}-redis - - name: REDIS_HOST - value: {{ template "django.redis.host" . }} - - name: REDIS_PORT - value: {{ template "django.redis.port" . }} - {{- end }} - envFrom: - - secretRef: - name: {{ include "django.fullname" . }} - - configMapRef: - name: {{ include "django.fullname" . }} - {{- with .Values.worker.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.worker.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.worker.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/templates/worker/hpa.yaml b/templates/worker/hpa.yaml deleted file mode 100644 index 878c6f6..0000000 --- a/templates/worker/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.worker.autoscaling.enabled -}} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ template "django.fullname" . }}-worker - labels: - {{- include "django.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ template "django.fullname" . }}-worker - minReplicas: {{ .Values.worker.autoscaling.minReplicas }} - maxReplicas: {{ .Values.worker.autoscaling.maxReplicas }} - metrics: - {{- if .Values.worker.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.worker.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.worker.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.worker.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} \ No newline at end of file diff --git a/values-sample.yaml b/values-sample.yaml deleted file mode 100644 index df6c311..0000000 --- a/values-sample.yaml +++ /dev/null @@ -1,18 +0,0 @@ -web: - hpa: - enabled: true - resources: - limits: - cpu: 1000m - memory: 512Mi - requests: - cpu: 100m - memory: 128Mi - -worker: - hpa: - enabled: true - -environmentVariables: - ENABLE_SOCIAL_AUTH: true - GLITCHTIP_DOMAIN: https://staging.glitchtip.com diff --git a/values.yaml b/values.yaml index 43733a2..931763f 100644 --- a/values.yaml +++ b/values.yaml @@ -1,7 +1,4 @@ # Default values for glitchtip. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - image: repository: glitchtip/glitchtip tag: latest @@ -10,16 +7,15 @@ image: imagePullSecrets: [] nameOverride: "" fullnameOverride: "" -databaseURL: -secretKey: -redisURL: -# Only needed when using stripe for saas environment -stripeLiveSecretKey: -djstripeWebhookSecret: -environmentVariables: - ENABLE_SOCIAL_AUTH: false - GLITCHTIP_DOMAIN: https://example.com +env: + normal: + DATABASE_URL: + ENABLE_SOCIAL_AUTH: false + GLITCHTIP_DOMAIN: https://example.com + secret: + SECRET_KEY: + REDIS_URL: web: replicaCount: 2 @@ -51,7 +47,7 @@ web: - key: app.kubernetes.io/instance operator: In values: - - glitchtip-prod-web + - glitchtip-web # Change this as needed topologyKey: kubernetes.io/hostname livenessProbe: failureThreshold: 5 @@ -73,13 +69,16 @@ web: # kubernetes.io/tls-acme: "true" hosts: - host: chart-example.local - paths: [] + paths: + - path: / + pathType: ImplementationSpecific tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.local worker: + enabled: true replicaCount: 1 autoscaling: enabled: false @@ -105,18 +104,18 @@ serviceAccount: # If not set and create is true, a name is generated using the fullname template name: + redis: enabled: true master: persistence: enabled: false - slave: + replica: + replicaCount: 1 persistence: enabled: false - cluster: - enabled: false - slaveCount: 1 # Default to disabled, use a managed database service. But can be enabled here. postgresql: enabled: false + postgresqlPassword: # Must be set