add support for internal and external postgres

This commit is contained in:
James 2024-01-23 20:40:52 +00:00
parent 1ea2f347fe
commit efc91e6967
Signed by: thumbscrw
GPG Key ID: 4A3BB8AF7D9C2B46
8 changed files with 161 additions and 56 deletions

1
charts/tandoor-recipes/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
charts/*.tgz

View File

@ -0,0 +1,6 @@
dependencies:
- name: postgresql
repository: https://charts.bitnami.com/bitnami
version: 12.12.10
digest: sha256:c46f569535f1fbc2cbd743df1c0c38af969b6f82d638705af20aaba0af03d71b
generated: "2024-01-20T17:18:32.741753422Z"

View File

@ -1,6 +1,7 @@
apiVersion: v2 apiVersion: v2
name: tandoor-recipes name: tandoor-recipes
description: A Helm chart for Kubernetes description: A Helm chart for Tandoor Recipes, a digital recipe manager
icon: https://github.com/vabene1111/recipes/raw/develop/docs/logo_color.svg
# A chart can be either an 'application' or a 'library' chart. # A chart can be either an 'application' or a 'library' chart.
# #
@ -22,3 +23,9 @@ version: 0.1.0
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes. # It is recommended to use it with quotes.
appVersion: "1.5.6" appVersion: "1.5.6"
dependencies:
- name: postgresql
version: ^12.12.10
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled

View File

@ -60,3 +60,81 @@ Create the name of the service account to use
{{- default "default" .Values.serviceAccount.name }} {{- default "default" .Values.serviceAccount.name }}
{{- end }} {{- end }}
{{- 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 "tandoor-recipes.postgresql.fullname" -}}
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Set postgres host
*/}}
{{- define "tandoor-recipes.postgresql.host" -}}
{{- if .Values.postgresql.enabled -}}
{{- template "tandoor-recipes.postgresql.fullname" . -}}
{{- else -}}
{{ required "A valid externalPostgresql.host is required" .Values.externalPostgresql.host }}
{{- end -}}
{{- end -}}
{{/*
Set postgres secret
*/}}
{{- define "tandoor-recipes.postgresql.secret" -}}
{{- if .Values.postgresql.enabled -}}
{{- template "tandoor-recipes.postgresql.fullname" . -}}
{{- else -}}
{{- template "tandoor-recipes.fullname" . -}}
{{- end -}}
{{- end -}}
{{/*
Set postgres port
*/}}
{{- define "tandoor-recipes.postgresql.port" -}}
{{- if .Values.postgresql.enabled -}}
{{- if .Values.postgresql.service -}}
{{- .Values.postgresql.service.port | default 5432 }}
{{- else -}}
5432
{{- end -}}
{{- else -}}
{{- required "A valid externalPostgresql.port is required" .Values.externalPostgresql.port -}}
{{- end -}}
{{- end -}}
{{/*
Set postgresql username
*/}}
{{- define "tandoor-recipes.postgresql.username" -}}
{{- if .Values.postgresql.enabled -}}
{{ required "A valid postgresql.auth.username is required" .Values.postgresql.auth.username }}
{{- else -}}
{{ required "A valid externalPostgresql.username is required" .Values.externalPostgresql.username }}
{{- end -}}
{{- end -}}
{{/*
Set postgresql password
*/}}
{{- define "tandoor-recipes.postgresql.password" -}}
{{- if .Values.postgresql.enabled -}}
{{ required "A valid postgresql.auth.password is required" .Values.postgresql.auth.password }}
{{- else if not (and .Values.externalPostgresql.existingSecret .Values.externalPostgresql.existingSecretPasswordKey) -}}
{{ required "A valid externalPostgresql.password is required" .Values.externalPostgresql.password }}
{{- end -}}
{{- end -}}
{{/*
Set postgresql database
*/}}
{{- define "tandoor-recipes.postgresql.database" -}}
{{- if .Values.postgresql.enabled -}}
{{- .Values.postgresql.auth.database | default "recipes" }}
{{- else -}}
{{ required "A valid externalPostgresql.database is required" .Values.externalPostgresql.database }}
{{- end -}}
{{- end -}}

View File

@ -5,9 +5,9 @@ metadata:
labels: labels:
{{- include "tandoor-recipes.labels" . | nindent 4 }} {{- include "tandoor-recipes.labels" . | nindent 4 }}
spec: spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }} replicas: {{ .Values.replicaCount }}
{{- end }} strategy:
type: Recreate
selector: selector:
matchLabels: matchLabels:
{{- include "tandoor-recipes.selectorLabels" . | nindent 6 }} {{- include "tandoor-recipes.selectorLabels" . | nindent 6 }}
@ -37,6 +37,24 @@ spec:
- name: http - name: http
containerPort: {{ .Values.service.port }} containerPort: {{ .Values.service.port }}
protocol: TCP protocol: TCP
env:
- name: DB_ENGINE
value: django.db.backends.postgresql
- name: POSTGRES_HOST
value: {{ include "tandoor-recipes.postgresql.host" . }}
- name: POSTGRES_PORT
value: {{ include "tandoor-recipes.postgresql.port" . | quote }}
- name: POSTGRES_USER
value: {{ include "tandoor-recipes.postgresql.username" . }}
- name: POSTGRES_PASSWORD
value: {{ include "tandoor-recipes.postgresql.password" . }}
- name: POSTGRES_DB
value: {{ include "tandoor-recipes.postgresql.database" . }}
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: recipes-secret-key
key: password
livenessProbe: livenessProbe:
httpGet: httpGet:
path: / path: /

View File

@ -1,32 +0,0 @@
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "tandoor-recipes.fullname" . }}
labels:
{{- include "tandoor-recipes.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "tandoor-recipes.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,12 @@
{{- if empty .Values.secretKey }}
apiVersion: v1
kind: Secret
metadata:
name: "recipes-secret-key"
type: Opaque
data:
{{- $secretObj := (lookup "v1" "Secret" .Release.Namespace "recipes-secret-key") | default dict }}
{{- $secretData := (get $secretObj "data") | default dict }}
{{- $secretKey := (get $secretData "recipes-secret-key") | default (randAlphaNum 32 | b64enc) }}
password: {{ $secretKey | quote }}
{{- end }}

View File

@ -38,19 +38,41 @@ securityContext: {}
service: service:
type: ClusterIP type: ClusterIP
port: 80 port: 8080
externalPostgresql:
enabled: false
# host: postgres
port: 5432
database: recipes
username: recipes
# password: recipes
postgresql:
enabled: true
auth:
database: recipes
username: recipes
password: recipes
recipes: recipes:
db: secretKey: ""
# -- Database name persistence:
name: recipes static:
# -- Database hostname enabled: false
host: "" existingClaim: ""
# -- Database password annotations: {}
password: freshrss accessMode: ReadWriteOnce
# -- Database user storageClass: ""
user: freshrss size: 1Gi
media:
enabled: false
existingClaim: ""
annotations: {}
accessMode: ReadWriteOnce
storageClass: ""
size: 1Gi
ingress: ingress:
enabled: false enabled: false
className: "" className: ""
@ -58,14 +80,14 @@ ingress:
# kubernetes.io/ingress.class: nginx # kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true" # kubernetes.io/tls-acme: "true"
hosts: hosts:
- host: chart-example.local - host: recipes.local
paths: paths:
- path: / - path: /
pathType: ImplementationSpecific pathType: ImplementationSpecific
tls: [] tls: []
# - secretName: chart-example-tls # - secretName: recipes-tls
# hosts: # hosts:
# - chart-example.local # - recipes.local
resources: {} resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious # We usually recommend not to specify default resources and to leave this as a conscious
@ -79,13 +101,6 @@ resources: {}
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
nodeSelector: {} nodeSelector: {}
tolerations: [] tolerations: []