Add postgres-operator and basic common postgres-manifest (#303)

* Add postgres-operator and basic common postgres-manifest

* move postgres to dev train
This commit is contained in:
Kjeld Schouten-Lebbing
2021-04-10 16:33:51 +02:00
committed by GitHub
parent 54f70c4fae
commit 67ead0cdfb
26 changed files with 749 additions and 2 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
apiVersion: v2
kubeVersion: ">=1.16.0-0"
name: common
version: 2.0.3
version: 2.1.0
# upstream_version:
appVersion: none
description: Function library for TrueCharts
+2
View File
@@ -42,4 +42,6 @@ Main entrypoint for the common library chart. It will render all underlying temp
{{ include "common.ingress" . | nindent 0 }}
{{ include "common.resources.portal" . | nindent 0 }}
{{ include "common.storage.permissions" . | nindent 0 }}
{{ include "common.resources.postgres" . | nindent 0 }}
{{- end -}}
+15
View File
@@ -33,4 +33,19 @@ of all the entries of the persistence key.
{{- include "common.classes.pvc" $ -}}
{{- end }}
{{- end }}
{{/*
This is kept seperate, to enable us ot add "persistence" to questions.yaml and keep this out of it
*/}}
{{- range $index, $PVC := .Values.backupPersistence }}
{{- if and $PVC.enabled (not (or $PVC.emptyDir $PVC.existingClaim)) -}}
{{- $persistenceValues := $PVC -}}
{{- if not $persistenceValues.nameSuffix -}}
{{- $_ := set $persistenceValues "nameSuffix" "buildinBackup" -}}
{{- end -}}
{{- $_ := set $ "ObjectValues" (dict "persistence" $persistenceValues) -}}
{{- print ("---") | nindent 0 -}}
{{- include "common.classes.pvc" $ -}}
{{- end }}
{{- end }}
{{- end }}
+5 -1
View File
@@ -28,7 +28,9 @@ within the common library.
{{- end -}}
{{ end -}}
{{- $pvcName := include "common.names.fullname" . -}}
{{- if hasKey $values "nameSuffix" -}}
{{- if hasKey $values "nameOverride" -}}
{{- $pvcName = $values.nameOverride -}}
{{- else if hasKey $values "nameSuffix" -}}
{{- $pvcName = printf "%v-%v" $pvcName $values.nameSuffix -}}
{{ end -}}
kind: PersistentVolumeClaim
@@ -54,5 +56,7 @@ spec:
storage: {{ required (printf "size is required for PVC %v" $pvcName) $values.size | quote }}
{{- if $values.storageClass }}
storageClassName: {{ include "common.storage.class" . }}
{{- else }}
storageClassName: {{ ( printf "%v-%v" "ix-storage-class" .Release.Name ) }}
{{- end }}
{{- end -}}
@@ -28,6 +28,11 @@ within the common library.
{{- $svcName := $values.serviceName | default $ingressName -}}
{{- if $values.dynamicServiceName }}
{{- $dynamicServiceName := printf "%v-%v" .Release.Name $values.dynamicServiceName -}}
{{- $svcName = $dynamicServiceName -}}
{{- end }}
{{- if $values.servicePort }}
{{- $svcPort = $values.servicePort -}}
{{- end }}
@@ -0,0 +1,112 @@
{{- define "common.resources.postgres" -}}
{{- if .Values.enableDB -}}
{{- $instanceName := ( printf "%v%v" ( include "common.names.fullname" .|lower ) "-postgres" ) -}}
{{- $superuser := ( default (keys .Values.postgresql.users | first ) .Values.dbsuperuser.user ) -}}
{{- $secretName := ( printf "%s.%s.credentials.postgresql.acid.zalan.do" ( $superuser ) ( $instanceName ) ) -}}
{{- $backupPVCSubpath := ( default (printf "%s/%s" .Values.dbBackup.subpathPrefix (include "common.names.fullname" .)) .Values.dbBackup.subpath ) -}}
{{- $storageClass := ( printf "%v-%v" "ix-storage-class" .Release.Name ) -}}
{{- if not .Values.postgresql.teamId -}}
{{- $_ := set .Values.postgresql "teamId" (include "common.names.fullname" .) }}
{{- end}}
---
apiVersion: v1
kind: Secret
metadata:
labels:
{{- include "common.labels" . | nindent 4 }}
application: spilo
team: {{ include "common.names.fullname" . }}
"helm.sh/hook": "pre-install"
"helm.sh/hook-delete-policy": "pre-delete"
name: {{ $secretName }}
stringData:
username: {{ $superuser }}
password: {{ default (randAlphaNum 50) .Values.dbsuperuser.password }}
type: Opaque
---
{{/*
CRD that requiests postgres-operator to spin-up a postgresql instance (or multiple in HA)
*/}}
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: {{ $instanceName }}
labels:
{{- include "common.labels" . | nindent 4 }}
spec:
volume:
size: "100Gi"
storageClass: {{ $storageClass | quote }}
{{- .Values.postgresql | toYaml | nindent 2 }}
{{/*
Special magic cronjob that does a extra backup in addition to postgres-operator to a PVC of your choice.
*/}}
{{- if .Values.dbBackup.existingClaim -}}
---
# ------------------- CronJob ------------------- #
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: {{ include "common.names.fullname" . }}-backup
labels:
{{- include "common.labels" . | nindent 4 }}
spec:
schedule: {{ .Values.dbBackup.schedule | quote }}
concurrencyPolicy: Replace
jobTemplate:
spec:
template:
metadata:
name: {{ include "common.names.fullname" . }}-backup
labels:
{{- include "common.labels.selectorLabels" . | nindent 12 }}
spec:
containers:
- name: backup
image: "{{ .Values.dbBackup.image.repository}}:{{ .Values.dbBackup.image.tag}}"
imagePullPolicy: {{ .Values.dbBackup.image.imagePullPolicy}}
command:
- /bin/sh
- -ce
- |
echo "$(date) - Start dump"
pg_dumpall > /backup/new && mv /backup/new /backup/backup
echo "$(date) - End dump"
ls -lh /backup
resources:
{{- .Values.dbBackup.resources | toYaml | nindent 16 }}
env:
- name: PGHOST
value: {{ $instanceName }}
- name: PGUSER
valueFrom:
secretKeyRef:
name: {{ $secretName }}
key: username
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: {{ $secretName }}
key: password
volumeMounts:
- mountPath: /backup
name: backup-volume
subPath: {{ $backupPVCSubpath }}
restartPolicy: OnFailure
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: {{ .Values.dbBackup.existingClaim }}
{{- end -}}
{{- end -}}
{{- end -}}
+79
View File
@@ -32,6 +32,7 @@ serviceAccount:
# If not set and create is true, a name is generated using the fullname template
name: ""
env: {}
# TZ: UTC
@@ -240,6 +241,29 @@ persistence:
emptyDir: true
mountPath: /shared
# Special PVC instance, that does get affected by putting "persistence" into questions.yaml
backupPersistence:
buildinBackup:
enabled: true
nameOverride: "buildinBackup"
## configuration data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
## storageClass: "-"
##
## If you want to reuse an existing claim, you can pass the name of the PVC using
## the existingClaim variable
# existingClaim: your-claim
# subPath: some-subpath
accessMode: ReadWriteOnce
size: 100Gi
## Set to true to retain the PVC upon helm uninstall
skipuninstall: false
additionalVolumes: []
additionalVolumeMounts: []
@@ -312,3 +336,58 @@ fixMountPermissions: true
# hostPathEnabled: false
# hostPath: ""
# setPermissions: true
#### DB Values
# See all operator values at https://github.com/zalando/postgres-operator/blob/master/docs/reference/cluster_manifest.md
postgresql:
# -- team Id for the DB cluster
teamId:
# -- Number of replicas
# It will be automatically set with the number of replicaNodes so any values set here are ignored.
numberOfInstances: 1
# -- DB users to create (see operator)
users:
postgres:
- superuser
- createdb
# -- databases to create and their user
databases:
postgres: postgres
postgresql:
# -- Postgres version to deploy - see which versions are supported by the operator
version: "13"
dbsuperuser:
# -- Superuser user used for cronjobs
# @default -- first user in postgresql.users
user:
# -- Superuser password
# @default -- randomly generated on first install of the chart
password:
# -- Superuser k8s secret name. It must match the patter used by the operator
# @default -- <user>.<db name>.credentials.postgresql.acid.zalan.do
secret:
dbBackup:
# Enable backups to a PVC
# defaults to our default buildinBackup PVC, but can be overridden in the future
existingClaim: buildinBackup
# -- Backup schedule for postgres dumps
schedule: "@daily"
# -- Persistent volume claim subpath prefix for the backups
subpathPrefix: "backup/db"
# -- Persistent volume claim subpath for the backups
# @default: <subpathPrefix/<release-name>
subpath:
image:
repository: postgres
pullPolicy: IfNotPresent
tag: latest
resources:
requests:
memory: "10Mi"
cpu: "5m"