mirror of
https://github.com/dredx/prole.git
synced 2026-09-24 16:34:31 +00:00
- align app/db cluster defaults for knoe-dev-0 + knoe-dev-cnpg-0 on e2-standard-2\n- harden Supabase deploy flow for cross-cluster DB ILB, GKE storage class, and node selector fallback\n- migrate Helm chart path to knoe-supabase and make external DB host rendering IP-safe\n- disable Kerberos in prod unattended config to prevent Supabase GSS auth failures\n- add Supabase port-forward mappings and DB backup context handling improvements\n\nBuild status: k8s stable Co-authored-by: Junie <junie@jetbrains.com>
168 lines
5.1 KiB
Smarty
168 lines
5.1 KiB
Smarty
{{/*
|
|
Expand the name of the chart.
|
|
*/}}
|
|
{{- define "supabase.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 "supabase.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 "supabase.chart" -}}
|
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
{{- end }}
|
|
|
|
{{/*
|
|
Common labels
|
|
*/}}
|
|
{{- define "supabase.labels" -}}
|
|
helm.sh/chart: {{ include "supabase.chart" . }}
|
|
{{ include "supabase.selectorLabels" . }}
|
|
{{- if .Chart.AppVersion }}
|
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
{{- end }}
|
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
{{- end }}
|
|
|
|
{{/*
|
|
Selector labels
|
|
*/}}
|
|
{{- define "supabase.selectorLabels" -}}
|
|
app.kubernetes.io/name: {{ include "supabase.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
{{- end }}
|
|
|
|
{{/*
|
|
Create the name of the service account to use
|
|
*/}}
|
|
{{- define "supabase.serviceAccountName" -}}
|
|
{{- if .Values.serviceAccount.create }}
|
|
{{- default (include "supabase.fullname" .) .Values.serviceAccount.name }}
|
|
{{- else }}
|
|
{{- default "default" .Values.serviceAccount.name }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{/*
|
|
Scheduling helpers
|
|
|
|
The knoe service cluster uses node roles:
|
|
- myrddin: knoe.dev/node-role=db
|
|
- merlin/pi: knoe.dev/node-role=general
|
|
|
|
Supabase is an optional workload and must never schedule onto db nodes.
|
|
|
|
We enforce this in manifests with:
|
|
- requiredDuringSchedulingIgnoredDuringExecution node affinity
|
|
- a nodeSelector merge that forces knoe.dev/node-role=general while preserving any other selector keys
|
|
|
|
To keep it explicit and predictable, any user-provided nodeAffinity is ignored (replaced) while
|
|
podAffinity/podAntiAffinity are preserved.
|
|
*/}}
|
|
|
|
{{- define "supabase.enforcedGeneralNodeSelector" -}}
|
|
{{- $ns := dict -}}
|
|
{{- with .nodeSelector -}}
|
|
{{- if kindIs "map" . -}}
|
|
{{- $ns = merge $ns . -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- $_ := set $ns "knoe.dev/node-role" "general" -}}
|
|
nodeSelector:
|
|
{{- toYaml $ns | nindent 2 -}}
|
|
{{- end }}
|
|
|
|
{{- define "supabase.enforcedGeneralAffinity" -}}
|
|
{{- $extra := dict -}}
|
|
{{- with .affinity -}}
|
|
{{- if kindIs "map" . -}}
|
|
{{- $extra = omit . "nodeAffinity" -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
affinity:
|
|
nodeAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
nodeSelectorTerms:
|
|
- matchExpressions:
|
|
- key: knoe.dev/node-role
|
|
operator: In
|
|
values:
|
|
- general
|
|
{{- if gt (len $extra) 0 }}
|
|
{{ toYaml $extra | nindent 2 }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{/*
|
|
Database helpers
|
|
|
|
These helpers unify DB connection settings across all components and support
|
|
either the chart-managed Postgres or an external Postgres backend.
|
|
*/}}
|
|
|
|
{{- define "supabase.database.externalEnabled" -}}
|
|
{{- if and (not .Values.deployment.db.enabled) .Values.externalDatabase.enabled -}}true{{- else -}}false{{- end -}}
|
|
{{- end }}
|
|
|
|
{{- define "supabase.database.host" -}}
|
|
{{- if .Values.deployment.db.enabled -}}
|
|
{{- include "supabase.db.fullname" . -}}
|
|
{{- else if .Values.externalDatabase.enabled -}}
|
|
{{- if and .Values.externalDatabase.createAliasService (not (regexMatch "^([0-9]{1,3}\\.){3}[0-9]{1,3}$" (toString .Values.externalDatabase.host))) -}}
|
|
{{- default "db" .Values.externalDatabase.aliasServiceName -}}
|
|
{{- else -}}
|
|
{{- .Values.externalDatabase.host -}}
|
|
{{- end -}}
|
|
{{- else -}}
|
|
{{- fail "Invalid database configuration: either deployment.db.enabled=true or externalDatabase.enabled=true must be set" -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
|
|
{{- define "supabase.database.port" -}}
|
|
{{- if .Values.deployment.db.enabled -}}
|
|
{{- .Values.service.db.port | toString -}}
|
|
{{- else if .Values.externalDatabase.enabled -}}
|
|
{{- .Values.externalDatabase.port | toString -}}
|
|
{{- else -}}
|
|
{{- fail "Invalid database configuration: either deployment.db.enabled=true or externalDatabase.enabled=true must be set" -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
|
|
{{- define "supabase.database.name" -}}
|
|
{{- if .Values.deployment.db.enabled -}}
|
|
{{- .Values.secret.db.database -}}
|
|
{{- else if .Values.externalDatabase.enabled -}}
|
|
{{- .Values.externalDatabase.database -}}
|
|
{{- else -}}
|
|
{{- fail "Invalid database configuration: either deployment.db.enabled=true or externalDatabase.enabled=true must be set" -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
|
|
{{- define "supabase.database.ssl" -}}
|
|
{{- if .Values.deployment.db.enabled -}}
|
|
{{- .Values.environment.auth.DB_SSL -}}
|
|
{{- else if .Values.externalDatabase.enabled -}}
|
|
{{- .Values.externalDatabase.ssl -}}
|
|
{{- else -}}
|
|
{{- fail "Invalid database configuration: either deployment.db.enabled=true or externalDatabase.enabled=true must be set" -}}
|
|
{{- end -}}
|
|
{{- end }}
|