[OPB-xxx] adding configuration and changing structure for k8s deployment

This commit is contained in:
Sheldan
2023-09-22 00:44:40 +02:00
parent d448dfbf9b
commit 5378a4038b
87 changed files with 2007 additions and 9649 deletions

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "oneplusBot.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 "oneplusBot.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 "oneplusBot.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "oneplusBot.labels" -}}
helm.sh/chart: {{ include "oneplusBot.chart" . }}
{{ include "oneplusBot.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "oneplusBot.selectorLabels" -}}
app.kubernetes.io/name: {{ include "oneplusBot.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "oneplusBot.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "oneplusBot.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,7 @@
apiVersion: v1
kind: Secret
metadata:
name: api-keys
data:
discordToken: {{ $.Values.apiKeys.discord.token | b64enc }} # b64enc is needed, because a stringData secret field cannot hold numeric values
youtubeApiKey: {{ $.Values.apiKeys.youtube.apiKey | b64enc }}

View File

@@ -0,0 +1,69 @@
{{- if .Values.dbConfigDeployment.enabled -}}
apiVersion: batch/v1
kind: Job
metadata:
{{- $deploymentJobName := print ((include "oneplusBot.fullname" .) | trunc 39) "-db-config-deployment-job" }}
name: {{ $deploymentJobName | trunc 63 }}
annotations:
"helm.sh/hook": pre-upgrade,pre-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: db-config-deployment-job
image: "{{ $.Values.dbConfigDeployment.repository }}/{{ $.Values.dbConfigDeployment.image }}:{{ $.Values.dbConfigDeployment.tag | default .Chart.AppVersion}}"
imagePullPolicy: {{ $.Values.dbConfigDeployment.pullPolicy }}
args:
- "/var/db-config/"
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPassword
- name: DB_HOST
valueFrom:
secretKeyRef:
name: db-credentials
key: dbHost
- name: DB_PORT
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPort
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-credentials
key: dbUser
- name: DB_NAME
valueFrom:
secretKeyRef:
name: db-credentials
key: dbName
- name: DB_SCHEME
value: "abstracto"
volumeMounts:
- mountPath: "/var/db-config/"
name: database-config-mount
restartPolicy: Never
initContainers:
- name: database-config-data
image: "{{ $.Values.dbConfigDeploymentData.repository }}/{{ $.Values.dbConfigDeploymentData.image }}:{{ $.Values.dbConfigDeploymentData.tag | default .Chart.AppVersion}}"
imagePullPolicy: {{ $.Values.dbConfigDeploymentData.pullPolicy }}
volumeMounts:
- mountPath: "/var/run-config"
name: database-config-mount
volumes:
- name: database-config-mount
emptyDir: {}
backoffLimit: 4
{{- end }}

View File

@@ -0,0 +1,13 @@
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
annotations:
"helm.sh/hook": pre-upgrade,pre-install
"helm.sh/hook-weight": "-6"
data:
dbPassword: {{ $.Values.dbCredentials.password | b64enc }} # b64enc is needed, because a stringData secret field cannot hold numeric values
dbUser: {{ $.Values.dbCredentials.userName | b64enc }}
dbHost: {{ $.Values.dbCredentials.host | b64enc }}
dbPort: {{ $.Values.dbCredentials.port | b64enc }}
dbName: {{ $.Values.dbCredentials.name | b64enc }}

View File

@@ -0,0 +1,106 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "oneplusBot.fullname" . }}
labels:
{{- include "oneplusBot.labels" . | nindent 4 }}
spec:
replicas: 1
selector:
matchLabels:
{{- include "oneplusBot.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "oneplusBot.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "oneplusBot.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.bot.repository }}/{{ .Values.bot.image }}:{{ .Values.bot.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.bot.pullPolicy }}
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPassword
- name: DB_HOST
valueFrom:
secretKeyRef:
name: db-credentials
key: dbHost
- name: DB_PORT
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPort
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-credentials
key: dbUser
- name: DB_NAME
valueFrom:
secretKeyRef:
name: db-credentials
key: dbName
- name: TOKEN
valueFrom:
secretKeyRef:
name: api-keys
key: discordToken
- name: OPEN_WEATHER_MAP_API_KEY
value: "placeholder" # a value is required, if the webservices module is loaded, but weather not used
- name: YOUTUBE_API_KEY
valueFrom:
secretKeyRef:
name: api-keys
key: youtubeApiKey
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
- name: debug
containerPort: 5005
protocol: TCP
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: {{ $.Values.bot.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ $.Values.bot.livenessProbe.periodSeconds }}
failureThreshold: {{ $.Values.bot.livenessProbe.failureThreshold }}
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: {{ $.Values.bot.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ $.Values.bot.readinessProbe.periodSeconds }}
failureThreshold: {{ $.Values.bot.readinessProbe.failureThreshold }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@@ -0,0 +1,42 @@
{{- if $.Values.grafanaDeployment.enabled }}
apiVersion: batch/v1
kind: Job
metadata:
name: grafana-dashboard-deployment-job
annotations:
"helm.sh/hook": post-install
"helm.sh/hook-weight": "-4"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: template-deployment-job
image: "{{ $.Values.grafanaDeployment.repository }}/{{ $.Values.grafanaDeployment.image }}:{{ $.Values.grafanaDeployment.tag }}"
imagePullPolicy: {{ $.Values.grafanaDeployment.pullPolicy }}
args:
- "/var/userconfig"
volumeMounts:
- mountPath: "/var/userconfig"
name: grafana-dashboard-config
readOnly: true
volumes:
- name: grafana-dashboard-config
secret:
secretName: grafana-dashboard-config
restartPolicy: Never
backoffLimit: 4
---
apiVersion: v1
kind: Secret
metadata:
name: grafana-dashboard-config
data:
config.yaml: {{ (tpl (.Files.Get "configuration/grafana/config.yaml") . ) | b64enc }}
log-dashboard.json: {{ (tpl (.Files.Get "configuration/grafana/oneplus-bot-log-dashboard.json") . ) | b64enc }}
discord-dashboard.json: {{ (tpl (.Files.Get "configuration/grafana/oneplus-bot-discord-dashboard.json") . ) | b64enc }}
{{- end }}

View File

@@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "oneplusBot.fullname" . }}
labels:
{{- include "oneplusBot.labels" . | nindent 4 }}
{{- with .Values.service.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "oneplusBot.selectorLabels" . | nindent 4 }}

View File

@@ -0,0 +1,12 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "oneplusBot.serviceAccountName" . }}
labels:
{{- include "oneplusBot.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,69 @@
{{- if .Values.dbConfigDeployment.enabled -}}
apiVersion: batch/v1
kind: Job
metadata:
{{- $deploymentJobName := print ((include "oneplusBot.fullname" .) | trunc 39) "-template-deployment-job" }}
name: {{ $deploymentJobName | trunc 63 }}
annotations:
"helm.sh/hook": pre-upgrade,pre-install
"helm.sh/hook-weight": "-4"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: template-deployment-job
image: "{{ $.Values.templateDeployment.repository }}/{{ $.Values.templateDeployment.image }}:{{ $.Values.templateDeployment.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ $.Values.templateDeployment.pullPolicy }}
args:
- "/var/template-config/"
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPassword
- name: DB_HOST
valueFrom:
secretKeyRef:
name: db-credentials
key: dbHost
- name: DB_PORT
valueFrom:
secretKeyRef:
name: db-credentials
key: dbPort
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-credentials
key: dbUser
- name: DB_NAME
valueFrom:
secretKeyRef:
name: db-credentials
key: dbName
- name: DB_SCHEME
value: "abstracto."
volumeMounts:
- mountPath: "/var/template-config/"
name: template-config-mount
initContainers:
- name: database-config-data
image: "{{ $.Values.templateDeploymentData.repository }}/{{ $.Values.templateDeploymentData.image }}:{{ $.Values.templateDeploymentData.tag | default .Chart.AppVersion}}"
imagePullPolicy: {{ $.Values.templateDeploymentData.pullPolicy }}
volumeMounts:
- mountPath: "/var/run-config"
name: template-config-mount
volumes:
- name: template-config-mount
emptyDir: {}
restartPolicy: Never
backoffLimit: 4
{{- end }}