helm chart
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.svn/
|
||||
.hg/
|
||||
|
||||
# IDE files
|
||||
.idea/
|
||||
.vscode/
|
||||
.DS_Store
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: v2
|
||||
name: papercrate
|
||||
description: Helm chart for deploying the Papercrate application stack
|
||||
version: 0.1.0
|
||||
appVersion: "0.1.0"
|
||||
@@ -0,0 +1,28 @@
|
||||
version: 0.8
|
||||
index_id: documents
|
||||
doc_mapping:
|
||||
tokenizers:
|
||||
- name: substring
|
||||
type: ngram
|
||||
min_gram: 2
|
||||
max_gram: 20
|
||||
prefix_only: false
|
||||
field_mappings:
|
||||
- name: document_id
|
||||
type: text
|
||||
stored: true
|
||||
- name: version_id
|
||||
type: text
|
||||
stored: true
|
||||
- name: title
|
||||
type: text
|
||||
tokenizer: substring
|
||||
stored: true
|
||||
- name: text
|
||||
type: text
|
||||
tokenizer: substring
|
||||
record: position
|
||||
search_settings:
|
||||
default_search_fields:
|
||||
- title
|
||||
- text
|
||||
@@ -0,0 +1,6 @@
|
||||
1. Backend service: {{ include "papercrate.fullname" . }}-backend (port {{ .Values.backend.service.port }})
|
||||
2. Frontend service: {{- if .Values.frontend.enabled }} {{ include "papercrate.fullname" . }}-frontend (port {{ .Values.frontend.service.port }}){{ else }} disabled{{ end }}
|
||||
3. Quickwit service: {{- if .Values.quickwit.enabled }} {{ include "papercrate.fullname" . }}-quickwit (port {{ .Values.quickwit.service.port }}){{ else }} disabled{{ end }}
|
||||
4. Postgres service: {{- if .Values.postgres.enabled }} {{ include "papercrate.fullname" . }}-postgres:5432{{ else }} disabled{{ end }}
|
||||
|
||||
Update values.yaml with your registry, tags, and secret references before installing.
|
||||
@@ -0,0 +1,67 @@
|
||||
{{- define "papercrate.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.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 -}}
|
||||
|
||||
{{- define "papercrate.labels" -}}
|
||||
app.kubernetes.io/name: {{ include "papercrate.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- range $key, $value := .Values.global.labels }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "papercrate.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.image" -}}
|
||||
{{- $registry := .Values.global.imageRegistry -}}
|
||||
{{- $repository := .image.repository -}}
|
||||
{{- if $registry }}
|
||||
{{- printf "%s/%s" $registry $repository -}}
|
||||
{{- else -}}
|
||||
{{- $repository -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.backend.image" -}}
|
||||
{{- include "papercrate.image" (dict "Values" .Values "image" .Values.backend.image) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.frontend.image" -}}
|
||||
{{- include "papercrate.image" (dict "Values" .Values "image" .Values.frontend.image) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.quickwit.image" -}}
|
||||
{{- include "papercrate.image" (dict "Values" .Values "image" .Values.quickwit.image) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.postgres.image" -}}
|
||||
{{- include "papercrate.image" (dict "Values" .Values "image" .Values.postgres.image) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "papercrate.image.tag" -}}
|
||||
{{- if .image.tag -}}
|
||||
{{- .image.tag -}}
|
||||
{{- else -}}
|
||||
{{- .Chart.AppVersion -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,83 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-backend
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
replicas: {{ .Values.backend.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: backend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: backend
|
||||
image: {{ include "papercrate.backend.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.backend.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.backend.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.backend.service.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: SERVER_HOST
|
||||
value: 0.0.0.0
|
||||
- name: SERVER_PORT
|
||||
value: {{ .Values.backend.service.port | quote }}
|
||||
{{- with .Values.global.s3.endpoint }}
|
||||
- name: AWS_ENDPOINT_URL
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.global.s3.region }}
|
||||
- name: AWS_REGION
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.global.s3.bucket }}
|
||||
- name: S3_BUCKET
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- range .Values.backend.env.extra }}
|
||||
- name: {{ .name }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ if .Values.backend.env.existingSecret }}{{ .Values.backend.env.existingSecret }}{{ else }}{{ include "papercrate.fullname" . }}-backend-env{{ end }}
|
||||
{{- with .Values.global.s3.credentialsSecret }}
|
||||
- secretRef:
|
||||
name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.backend.envFrom }}
|
||||
- {{ toYaml . | nindent 12 | trim }}
|
||||
{{- end }}
|
||||
{{- with .Values.backend.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.backend.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.backend.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.backend.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,25 @@
|
||||
{{- if not .Values.backend.env.existingSecret }}
|
||||
{{- $jwt := required "backend.env.jwtSecret must be provided when auto-creating secret" .Values.backend.env.jwtSecret -}}
|
||||
{{- $config := dict "databaseUrl" .Values.backend.env.databaseUrl -}}
|
||||
{{- if not (index $config "databaseUrl") -}}
|
||||
{{- if .Values.postgres.enabled -}}
|
||||
{{- $dbUser := required "postgres.auth.username is required when postgres.enabled" .Values.postgres.auth.username -}}
|
||||
{{- $dbPass := required "postgres.auth.password is required when postgres.enabled" .Values.postgres.auth.password -}}
|
||||
{{- $dbName := default "papercrate" .Values.backend.env.databaseName -}}
|
||||
{{- $dbHost := printf "%s-postgres" (include "papercrate.fullname" .) -}}
|
||||
{{- $_ := set $config "databaseUrl" (printf "postgres://%s:%s@%s:5432/%s" $dbUser $dbPass $dbHost $dbName) -}}
|
||||
{{- else -}}
|
||||
{{- fail "backend.env.databaseUrl must be provided when postgres.enabled is false" -}}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-backend-env
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backend
|
||||
stringData:
|
||||
JWT_SECRET: {{ $jwt | quote }}
|
||||
DATABASE_URL: {{ index $config "databaseUrl" | quote }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-backend
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
type: {{ .Values.backend.service.type }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.backend.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
selector:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: backend
|
||||
@@ -0,0 +1,69 @@
|
||||
{{- if .Values.frontend.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-frontend
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: frontend
|
||||
spec:
|
||||
replicas: {{ .Values.frontend.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: frontend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: frontend
|
||||
spec:
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: frontend
|
||||
image: {{ include "papercrate.frontend.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.frontend.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.frontend.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.frontend.service.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
{{- range .Values.frontend.env.extra }}
|
||||
- name: {{ .name }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
{{- if or .Values.frontend.envFrom .Values.frontend.env.existingSecret }}
|
||||
envFrom:
|
||||
{{- if .Values.frontend.env.existingSecret }}
|
||||
- secretRef:
|
||||
name: {{ .Values.frontend.env.existingSecret }}
|
||||
{{- end }}
|
||||
{{- range .Values.frontend.envFrom }}
|
||||
- {{ toYaml . | nindent 12 | trim }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.frontend.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.frontend.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.frontend.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.frontend.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.frontend.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-frontend
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: frontend
|
||||
spec:
|
||||
type: {{ .Values.frontend.service.type }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.frontend.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
selector:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: frontend
|
||||
{{- end }}
|
||||
@@ -0,0 +1,43 @@
|
||||
{{- if .Values.ingress.enabled }}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: ingress
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.className }}
|
||||
ingressClassName: {{ .Values.ingress.className }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ .host }}
|
||||
http:
|
||||
paths:
|
||||
{{- $root := $ }}
|
||||
{{- $paths := .paths | default (list (dict "path" "/" "pathType" "Prefix" "service" (dict "name" "frontend" "port" "http")) (dict "path" "/api" "pathType" "Prefix" "service" (dict "name" "backend" "port" "http"))) }}
|
||||
{{- range $paths }}
|
||||
- path: {{ .path | default "/" }}
|
||||
pathType: {{ .pathType | default "Prefix" }}
|
||||
backend:
|
||||
service:
|
||||
name: {{ printf "%s-%s" (include "papercrate.fullname" $root) (.service.name | default "frontend") }}
|
||||
port:
|
||||
{{- $port := .service.port | default "http" -}}
|
||||
{{- if kindIs "string" $port }}
|
||||
name: {{ $port }}
|
||||
{{- else }}
|
||||
number: {{ $port }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- toYaml .Values.ingress.tls | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,27 @@
|
||||
{{- if and .Values.postgres.enabled .Values.postgres.auth.databases }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres-init
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
data:
|
||||
init-databases.sh: |
|
||||
#!/bin/sh
|
||||
set -e
|
||||
{{- range $name, $_ := .Values.postgres.auth.databases }}
|
||||
if ! psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname postgres \
|
||||
-tAc "SELECT 1 FROM pg_database WHERE datname = '{{ $name }}'" | grep -q 1; then
|
||||
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname postgres \
|
||||
-c "CREATE DATABASE \"{{ $name }}\"";
|
||||
fi
|
||||
{{- end }}
|
||||
if [ -n "$PGDATA" ] && [ -f "$PGDATA/postgresql.conf" ]; then
|
||||
if grep -q "^max_connections" "$PGDATA/postgresql.conf"; then
|
||||
sed -i "s/^max_connections.*/max_connections = {{ .Values.postgres.maxConnections | default 200 }}/" "$PGDATA/postgresql.conf"
|
||||
else
|
||||
echo "max_connections = {{ .Values.postgres.maxConnections | default 200 }}" >> "$PGDATA/postgresql.conf"
|
||||
fi
|
||||
fi
|
||||
{{- end }}
|
||||
@@ -0,0 +1,13 @@
|
||||
{{- if and .Values.postgres.enabled .Values.postgres.auth.password }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
type: Opaque
|
||||
data:
|
||||
POSTGRES_USER: {{ .Values.postgres.auth.username | b64enc }}
|
||||
POSTGRES_PASSWORD: {{ .Values.postgres.auth.password | b64enc }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.postgres.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: postgres
|
||||
port: 5432
|
||||
targetPort: postgres
|
||||
protocol: TCP
|
||||
selector:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
{{- end }}
|
||||
@@ -0,0 +1,112 @@
|
||||
{{- if .Values.postgres.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
spec:
|
||||
serviceName: {{ include "papercrate.fullname" . }}-postgres
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: postgres
|
||||
spec:
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- $dbList := keys .Values.postgres.auth.databases }}
|
||||
{{- $primaryDb := "" }}
|
||||
{{- if gt (len $dbList) 0 }}
|
||||
{{- $primaryDb = index $dbList 0 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: postgres
|
||||
image: {{ include "papercrate.postgres.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.postgres.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.postgres.image.pullPolicy }}
|
||||
ports:
|
||||
- name: postgres
|
||||
containerPort: 5432
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: POSTGRES_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres
|
||||
key: POSTGRES_USER
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres
|
||||
key: POSTGRES_PASSWORD
|
||||
- name: POSTGRES_DB
|
||||
value: {{ default "postgres" $primaryDb | quote }}
|
||||
- name: PGDATA
|
||||
value: /var/lib/postgresql/data/pgdata
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /var/lib/postgresql/data
|
||||
{{- if .Values.postgres.auth.databases }}
|
||||
- name: init-scripts
|
||||
mountPath: /docker-entrypoint-initdb.d/init-databases.sh
|
||||
subPath: init-databases.sh
|
||||
{{- end }}
|
||||
{{- with .Values.postgres.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.postgres.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.postgres.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.postgres.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if or (not .Values.postgres.persistence.enabled) .Values.postgres.auth.databases }}
|
||||
volumes:
|
||||
{{- if not .Values.postgres.persistence.enabled }}
|
||||
- name: data
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- if .Values.postgres.auth.databases }}
|
||||
- name: init-scripts
|
||||
configMap:
|
||||
name: {{ include "papercrate.fullname" . }}-postgres-init
|
||||
defaultMode: 0755
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.postgres.persistence.enabled }}
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: data
|
||||
spec:
|
||||
accessModes:
|
||||
{{- range .Values.postgres.persistence.accessModes }}
|
||||
- {{ . }}
|
||||
{{- end }}
|
||||
{{- if .Values.postgres.persistence.storageClass }}
|
||||
storageClassName: {{ .Values.postgres.persistence.storageClass }}
|
||||
{{- end }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.postgres.persistence.size }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,98 @@
|
||||
{{- if .Values.quickwit.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-quickwit
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
spec:
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- $qw := dict "storageUri" .Values.quickwit.env.storageUri "metastoreUri" .Values.quickwit.env.metastoreUri -}}
|
||||
{{- if and (not (index $qw "storageUri")) .Values.global.s3.bucket -}}
|
||||
{{- $_ := set $qw "storageUri" (printf "s3://%s/quickwit" .Values.global.s3.bucket) -}}
|
||||
{{- end -}}
|
||||
{{- if not (index $qw "storageUri") -}}
|
||||
{{- fail "quickwit.env.storageUri must be set, or provide global.s3.bucket" -}}
|
||||
{{- end -}}
|
||||
{{- if and (not (index $qw "metastoreUri")) .Values.postgres.enabled -}}
|
||||
{{- $dbUser := required "postgres.auth.username is required when postgres.enabled" .Values.postgres.auth.username -}}
|
||||
{{- $dbPass := required "postgres.auth.password is required when postgres.enabled" .Values.postgres.auth.password -}}
|
||||
{{- $dbHost := printf "%s-postgres" (include "papercrate.fullname" .) -}}
|
||||
{{- $_ := set $qw "metastoreUri" (printf "postgres://%s:%s@%s:5432/quickwit" $dbUser $dbPass $dbHost) -}}
|
||||
{{- end -}}
|
||||
{{- if not (index $qw "metastoreUri") -}}
|
||||
{{- fail "quickwit.env.metastoreUri must be set when not using bundled Postgres" -}}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: quickwit
|
||||
image: {{ include "papercrate.quickwit.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.quickwit.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.quickwit.image.pullPolicy }}
|
||||
args: ["run"]
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.quickwit.service.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: QW_STORAGE_URI
|
||||
value: {{ index $qw "storageUri" | quote }}
|
||||
- name: QW_METASTORE_URI
|
||||
value: {{ index $qw "metastoreUri" | quote }}
|
||||
{{- with .Values.global.s3.endpoint }}
|
||||
- name: AWS_ENDPOINT_URL
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.global.s3.region }}
|
||||
- name: AWS_REGION
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- range .Values.quickwit.env.extra }}
|
||||
- name: {{ .name }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
{{- if or .Values.quickwit.envFrom .Values.global.s3.credentialsSecret }}
|
||||
envFrom:
|
||||
{{- with .Values.global.s3.credentialsSecret }}
|
||||
- secretRef:
|
||||
name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.quickwit.envFrom }}
|
||||
- {{ toYaml . | nindent 12 | trim }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.quickwit.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.quickwit.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.quickwit.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.quickwit.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,34 @@
|
||||
{{- if and .Values.quickwit.enabled .Values.quickwit.indexJob.enabled .Values.quickwit.indexJob.indexConfig.create }}
|
||||
{{- $cfg := .Values.quickwit.indexJob.indexConfig -}}
|
||||
{{- $config := dict "value" "" -}}
|
||||
{{- if $cfg.file }}
|
||||
{{- with $.Files.Get $cfg.file -}}
|
||||
{{- $_ := set $config "value" . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- if and (not (index $config "value")) $cfg.contents }}
|
||||
{{- $_ := set $config "value" $cfg.contents -}}
|
||||
{{- end -}}
|
||||
{{- if eq (trim (default "" (index $config "value"))) "" -}}
|
||||
{{- fail "Quickwit index configuration requires either indexConfig.file or indexConfig.contents" -}}
|
||||
{{- end }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-quickwit-index
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
app.kubernetes.io/part-of: quickwit-index
|
||||
data:
|
||||
{{ $cfg.key }}: |
|
||||
{{ index $config "value" | indent 4 }}
|
||||
{{- $ctx := dict "storageUri" (.Values.quickwit.env.storageUri | default "") -}}
|
||||
{{- if and (eq (index $ctx "storageUri") "") .Values.global.s3.bucket -}}
|
||||
{{- $_ := set $ctx "storageUri" (printf "s3://%s/quickwit" .Values.global.s3.bucket) -}}
|
||||
{{- end -}}
|
||||
{{- $storageUri := index $ctx "storageUri" -}}
|
||||
{{- if $storageUri }}
|
||||
{{ printf "index_uri: %s/documents" (trimSuffix "/" $storageUri) | indent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,78 @@
|
||||
{{- if and .Values.quickwit.enabled .Values.quickwit.indexJob.enabled }}
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-quickwit-index
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: quickwit-index
|
||||
annotations:
|
||||
"helm.sh/hook": post-install,post-upgrade
|
||||
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
|
||||
spec:
|
||||
backoffLimit: {{ .Values.quickwit.indexJob.backoffLimit }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: quickwit-index
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- $qw := dict "storageUri" .Values.quickwit.env.storageUri "metastoreUri" .Values.quickwit.env.metastoreUri -}}
|
||||
{{- if and (not (index $qw "storageUri")) .Values.global.s3.bucket -}}
|
||||
{{- $_ := set $qw "storageUri" (printf "s3://%s/quickwit" .Values.global.s3.bucket) -}}
|
||||
{{- end -}}
|
||||
{{- if not (index $qw "storageUri") -}}
|
||||
{{- fail "quickwit.env.storageUri must be set, or provide global.s3.bucket" -}}
|
||||
{{- end -}}
|
||||
{{- if and (not (index $qw "metastoreUri")) .Values.postgres.enabled -}}
|
||||
{{- $dbUser := required "postgres.auth.username is required when postgres.enabled" .Values.postgres.auth.username -}}
|
||||
{{- $dbPass := required "postgres.auth.password is required when postgres.enabled" .Values.postgres.auth.password -}}
|
||||
{{- $dbHost := printf "%s-postgres" (include "papercrate.fullname" .) -}}
|
||||
{{- $_ := set $qw "metastoreUri" (printf "postgres://%s:%s@%s:5432/quickwit" $dbUser $dbPass $dbHost) -}}
|
||||
{{- end -}}
|
||||
{{- if not (index $qw "metastoreUri") -}}
|
||||
{{- fail "quickwit.env.metastoreUri must be set when not using bundled Postgres" -}}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: quickwit-index
|
||||
image: {{ include "papercrate.quickwit.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.quickwit.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.quickwit.image.pullPolicy }}
|
||||
command:
|
||||
- quickwit
|
||||
- index
|
||||
- create
|
||||
args:
|
||||
- --index-config=/config/{{ .Values.quickwit.indexJob.indexConfig.key }}
|
||||
- --endpoint=http://{{ include "papercrate.fullname" . }}-quickwit:{{ .Values.quickwit.service.port }}
|
||||
{{- if or .Values.quickwit.envFrom .Values.global.s3.credentialsSecret }}
|
||||
envFrom:
|
||||
{{- with .Values.global.s3.credentialsSecret }}
|
||||
- secretRef:
|
||||
name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.quickwit.envFrom }}
|
||||
- {{ toYaml . | nindent 12 | trim }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if or .Values.quickwit.indexJob.indexConfig.existingConfigMap .Values.quickwit.indexJob.indexConfig.create }}
|
||||
volumeMounts:
|
||||
- name: index-config
|
||||
mountPath: /config
|
||||
{{- end }}
|
||||
{{- if or .Values.quickwit.indexJob.indexConfig.existingConfigMap .Values.quickwit.indexJob.indexConfig.create }}
|
||||
volumes:
|
||||
- name: index-config
|
||||
configMap:
|
||||
name: {{ if .Values.quickwit.indexJob.indexConfig.existingConfigMap }}{{ .Values.quickwit.indexJob.indexConfig.existingConfigMap }}{{ else }}{{ include "papercrate.fullname" . }}-quickwit-index{{ end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.quickwit.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-quickwit
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
spec:
|
||||
type: {{ .Values.quickwit.service.type }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.quickwit.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
selector:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: quickwit
|
||||
{{- end }}
|
||||
@@ -0,0 +1,86 @@
|
||||
{{- if .Values.worker.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "papercrate.fullname" . }}-worker
|
||||
labels:
|
||||
{{- include "papercrate.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: worker
|
||||
spec:
|
||||
replicas: {{ .Values.worker.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: worker
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "papercrate.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: worker
|
||||
spec:
|
||||
{{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- range .Values.global.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.imagePullSecrets }}
|
||||
- name: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- $workerSecrets := dict "primary" "" -}}
|
||||
{{- if .Values.worker.env.existingSecret -}}
|
||||
{{- $_ := set $workerSecrets "primary" .Values.worker.env.existingSecret -}}
|
||||
{{- else if .Values.backend.env.existingSecret -}}
|
||||
{{- $_ := set $workerSecrets "primary" .Values.backend.env.existingSecret -}}
|
||||
{{- else -}}
|
||||
{{- $_ := set $workerSecrets "primary" (printf "%s-backend-env" (include "papercrate.fullname" .)) -}}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: worker
|
||||
image: {{ include "papercrate.backend.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.backend.image "Chart" .Chart) }}
|
||||
imagePullPolicy: {{ .Values.backend.image.pullPolicy }}
|
||||
command: ["/usr/local/bin/papercrate-worker"]
|
||||
env:
|
||||
{{- with .Values.global.s3.endpoint }}
|
||||
- name: AWS_ENDPOINT_URL
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.global.s3.region }}
|
||||
- name: AWS_REGION
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.global.s3.bucket }}
|
||||
- name: S3_BUCKET
|
||||
value: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- range .Values.worker.env.extra }}
|
||||
- name: {{ .name }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ index $workerSecrets "primary" }}
|
||||
{{- with .Values.global.s3.credentialsSecret }}
|
||||
- secretRef:
|
||||
name: {{ . }}
|
||||
{{- end }}
|
||||
{{- range .Values.worker.envFrom }}
|
||||
- {{ toYaml . | nindent 12 | trim }}
|
||||
{{- end }}
|
||||
{{- with .Values.worker.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- 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 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,137 @@
|
||||
global:
|
||||
imageRegistry: ""
|
||||
imagePullSecrets:
|
||||
- papercrate-regcred
|
||||
labels: {}
|
||||
s3:
|
||||
endpoint: http://minio:9000
|
||||
region: us-east-1
|
||||
bucket: documents
|
||||
credentialsSecret: ""
|
||||
|
||||
backend:
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: registry.example.com/papercrate-backend
|
||||
tag: ""
|
||||
pullPolicy: IfNotPresent
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 3000
|
||||
env:
|
||||
existingSecret: ""
|
||||
extra: []
|
||||
jwtSecret: ""
|
||||
envFrom: []
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
|
||||
worker:
|
||||
replicaCount: 1
|
||||
enabled: true
|
||||
env:
|
||||
existingSecret: ""
|
||||
extra: []
|
||||
envFrom: []
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
|
||||
frontend:
|
||||
enabled: true
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: registry.example.com/papercrate-frontend
|
||||
tag: ""
|
||||
pullPolicy: IfNotPresent
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 80
|
||||
env:
|
||||
existingSecret: ""
|
||||
extra: []
|
||||
envFrom: []
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
className: ""
|
||||
annotations: {}
|
||||
hosts:
|
||||
- host: app.papercrate.local
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
service:
|
||||
name: frontend
|
||||
port: http
|
||||
- host: api.papercrate.local
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
service:
|
||||
name: backend
|
||||
port: http
|
||||
tls: []
|
||||
|
||||
postgres:
|
||||
enabled: true
|
||||
image:
|
||||
repository: postgres
|
||||
tag: "16-alpine"
|
||||
pullPolicy: IfNotPresent
|
||||
auth:
|
||||
username: papercrate
|
||||
password: papercrate_dev
|
||||
databases:
|
||||
papercrate: {}
|
||||
quickwit: {}
|
||||
maxConnections: 200
|
||||
persistence:
|
||||
enabled: true
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 10Gi
|
||||
storageClass: ""
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
|
||||
quickwit:
|
||||
enabled: true
|
||||
image:
|
||||
repository: quickwit/quickwit
|
||||
tag: "0.8.2"
|
||||
pullPolicy: IfNotPresent
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 7280
|
||||
env:
|
||||
storageUri: ""
|
||||
metastoreUri: ""
|
||||
extra: []
|
||||
envFrom: []
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
indexJob:
|
||||
enabled: true
|
||||
backoffLimit: 3
|
||||
indexConfig:
|
||||
existingConfigMap: ""
|
||||
key: documents-index.yaml
|
||||
create: true
|
||||
file: files/quickwit/documents-index.yaml
|
||||
contents: ""
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
Reference in New Issue
Block a user