helm: add helm chart
This commit is contained in:
@@ -42,7 +42,7 @@ jobs:
|
|||||||
- name: Check formatting for match_collector
|
- name: Check formatting for match_collector
|
||||||
working-directory: ./match_collector
|
working-directory: ./match_collector
|
||||||
run: npm run format:check
|
run: npm run format:check
|
||||||
|
|
||||||
build-and-push-images:
|
build-and-push-images:
|
||||||
needs: lint-and-format
|
needs: lint-and-format
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -76,3 +76,48 @@ jobs:
|
|||||||
tags: |
|
tags: |
|
||||||
git.vhaudiquet.fr/vhaudiquet/lolstats-match_collector:latest
|
git.vhaudiquet.fr/vhaudiquet/lolstats-match_collector:latest
|
||||||
git.vhaudiquet.fr/vhaudiquet/lolstats-match_collector:${{ github.sha }}
|
git.vhaudiquet.fr/vhaudiquet/lolstats-match_collector:${{ github.sha }}
|
||||||
|
|
||||||
|
lint-and-publish-chart:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build-and-push-images
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: https://gitea.com/actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install Helm
|
||||||
|
uses: azure/setup-helm@v5
|
||||||
|
|
||||||
|
- name: Update Chart version and appVersion
|
||||||
|
run: |
|
||||||
|
# Get base chart version from Chart.yaml
|
||||||
|
BASE_VERSION=$(grep '^version:' helm/buildpath/Chart.yaml | awk '{print $2}')
|
||||||
|
# Use timestamp for ordered versions (e.g., 0.1.0-20240511-130400)
|
||||||
|
# Note: SemVer pre-release cannot contain dots, only hyphens and alphanumerics
|
||||||
|
TIMESTAMP=$(date -u +"%Y%m%d-%H%M%S")
|
||||||
|
CHART_VERSION="${BASE_VERSION}-${TIMESTAMP}"
|
||||||
|
|
||||||
|
# Update both version and appVersion
|
||||||
|
sed -i "s/^version:.*/version: \"${CHART_VERSION}\"/" helm/buildpath/Chart.yaml
|
||||||
|
sed -i "s/^appVersion:.*/appVersion: \"${{ github.sha }}\"/" helm/buildpath/Chart.yaml
|
||||||
|
|
||||||
|
echo "chart_version=${CHART_VERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Lint Helm chart
|
||||||
|
run: helm lint helm/buildpath/
|
||||||
|
|
||||||
|
- name: Package Helm chart
|
||||||
|
run: |
|
||||||
|
helm package helm/buildpath/ \
|
||||||
|
--version "${{ env.chart_version }}" \
|
||||||
|
--app-version "${{ github.sha }}"
|
||||||
|
|
||||||
|
- name: Push Helm chart to Gitea registry
|
||||||
|
run: |
|
||||||
|
echo "Uploading chart to Gitea registry..."
|
||||||
|
echo "User: ${{ github.actor }}"
|
||||||
|
echo "URL: https://git.vhaudiquet.fr/api/packages/vhaudiquet/helm/api/charts"
|
||||||
|
# Trim any trailing newline from the token
|
||||||
|
TOKEN=$(echo -n "${{ secrets.PACKAGES_TOKEN }}" | tr -d '\n')
|
||||||
|
curl --fail -v --user "${{ github.actor }}:${TOKEN}" -X POST --upload-file buildpath-*.tgz "https://git.vhaudiquet.fr/api/packages/vhaudiquet/helm/api/charts"
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: buildpath
|
||||||
|
description: Helm chart for buildpath.win (LoL stats frontend, match collector, MongoDB)
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
|
appVersion: "1.0.0"
|
||||||
|
keywords:
|
||||||
|
- lol
|
||||||
|
- stats
|
||||||
|
- buildpath
|
||||||
|
maintainers:
|
||||||
|
- name: vhaudiquet
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
buildpath chart installed.
|
||||||
|
|
||||||
|
Check status:
|
||||||
|
kubectl -n {{ .Release.Namespace }} get all -l app.kubernetes.io/instance={{ .Release.Name }}
|
||||||
|
|
||||||
|
Mongo host seen by app pods: {{ include "buildpath.mongoHost" . }}
|
||||||
|
Frontend host (ingress): {{ .Values.frontend.ingress.host }}
|
||||||
|
|
||||||
|
If this is a brand-new install, rotate the default credentials in your values before exposing publicly:
|
||||||
|
secrets.riotApiKey
|
||||||
|
mongo.auth.rootPassword
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{{/* Expand the name of the chart. */}}
|
||||||
|
{{- define "buildpath.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Create a default fully qualified app name. */}}
|
||||||
|
{{- define "buildpath.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 }}
|
||||||
|
|
||||||
|
{{/* Chart name and version label. */}}
|
||||||
|
{{- define "buildpath.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Common labels. */}}
|
||||||
|
{{- define "buildpath.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "buildpath.chart" . }}
|
||||||
|
{{ include "buildpath.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Selector labels. */}}
|
||||||
|
{{- define "buildpath.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "buildpath.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Selector labels for a specific component. */}}
|
||||||
|
{{- define "buildpath.componentSelectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "buildpath.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: {{ .component | quote }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* MongoDB hostname (service DNS). */}}
|
||||||
|
{{- define "buildpath.mongoHost" -}}
|
||||||
|
{{- if .Values.mongo.hostOverride -}}
|
||||||
|
{{- .Values.mongo.hostOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-mongo" (include "buildpath.fullname" .) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-cdragon
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: cdragon-cache
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.cdragon.volume.accessMode | quote }}
|
||||||
|
storageClassName: {{ .Values.cdragon.volume.storageClassName | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.cdragon.volume.size | quote }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{{- if or .Values.config.extraEnv (and .Values.cdragon.enabled .Values.cdragon.cacheDir) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
CDRAGON_CACHE_DIR: {{ .Values.cdragon.cacheDir | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $k, $v := .Values.config.extraEnv }}
|
||||||
|
{{ $k }}: {{ $v | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{{- if .Values.frontend.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.frontend.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "frontend") | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "frontend") | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: frontend
|
||||||
|
image: "{{ .Values.global.imageRegistry }}/{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.frontend.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 3000
|
||||||
|
protocol: TCP
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
- configMapRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
{{- with .Values.frontend.extraEnv }}
|
||||||
|
env:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: cdragon
|
||||||
|
mountPath: {{ .Values.cdragon.cacheDir | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.frontend.resources | nindent 12 }}
|
||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
volumes:
|
||||||
|
- name: cdragon
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ include "buildpath.fullname" . }}-cdragon
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{{- if and .Values.frontend.enabled .Values.frontend.ingress.enabled }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
{{- with .Values.frontend.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.frontend.ingress.className }}
|
||||||
|
ingressClassName: {{ .Values.frontend.ingress.className | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.frontend.ingress.tls.enabled }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.frontend.ingress.host | quote }}
|
||||||
|
{{- if .Values.frontend.ingress.tls.secretName }}
|
||||||
|
secretName: {{ .Values.frontend.ingress.tls.secretName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
- host: {{ .Values.frontend.ingress.host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ .Values.frontend.ingress.path | quote }}
|
||||||
|
pathType: {{ .Values.frontend.ingress.pathType }}
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-frontend
|
||||||
|
port:
|
||||||
|
number: {{ .Values.frontend.service.port }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{{- if .Values.frontend.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.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 "buildpath.componentSelectorLabels" (set . "component" "frontend") | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
{{- if .Values.matchCollector.enabled }}
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-match-collector
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: match-collector
|
||||||
|
spec:
|
||||||
|
schedule: {{ .Values.matchCollector.schedule | quote }}
|
||||||
|
concurrencyPolicy: {{ .Values.matchCollector.concurrencyPolicy }}
|
||||||
|
successfulJobsHistoryLimit: {{ .Values.matchCollector.successfulJobsHistoryLimit }}
|
||||||
|
failedJobsHistoryLimit: {{ .Values.matchCollector.failedJobsHistoryLimit }}
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
backoffLimit: {{ .Values.matchCollector.backoffLimit }}
|
||||||
|
{{- if .Values.matchCollector.activeDeadlineSeconds }}
|
||||||
|
activeDeadlineSeconds: {{ .Values.matchCollector.activeDeadlineSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "match-collector") | nindent 12 }}
|
||||||
|
spec:
|
||||||
|
restartPolicy: {{ .Values.matchCollector.jobRestartPolicy }}
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: match-collector
|
||||||
|
image: "{{ .Values.global.imageRegistry }}/{{ .Values.matchCollector.image.repository }}:{{ .Values.matchCollector.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.matchCollector.image.pullPolicy }}
|
||||||
|
# Override the image CMD: run the collector exactly once, then exit.
|
||||||
|
# The image ENTRYPOINT (docker-entrypoint.sh) still fixes /cdragon perms
|
||||||
|
# and drops privileges to the node user via su-exec.
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
- node --import=tsx src/index.ts
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
- configMapRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
{{- with .Values.matchCollector.extraEnv }}
|
||||||
|
env:
|
||||||
|
{{- toYaml . | nindent 16 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: cdragon
|
||||||
|
mountPath: {{ .Values.cdragon.cacheDir | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.matchCollector.resources | nindent 16 }}
|
||||||
|
{{- if .Values.cdragon.enabled }}
|
||||||
|
volumes:
|
||||||
|
- name: cdragon
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ include "buildpath.fullname" . }}-cdragon
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{{- if .Values.mongo.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-mongo-config
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: mongo
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.mongo.configVolume.accessMode | quote }}
|
||||||
|
storageClassName: {{ .Values.mongo.configVolume.storageClassName | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.mongo.configVolume.size | quote }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{{- if .Values.mongo.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-mongo
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: mongo
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.mongo.service.type }}
|
||||||
|
ports:
|
||||||
|
- name: mongo
|
||||||
|
port: {{ .Values.mongo.service.port }}
|
||||||
|
targetPort: mongo
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "mongo") | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
{{- if .Values.mongo.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}-mongo
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: mongo
|
||||||
|
spec:
|
||||||
|
serviceName: {{ include "buildpath.fullname" . }}-mongo
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "mongo") | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.componentSelectorLabels" (set . "component" "mongo") | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
securityContext:
|
||||||
|
runAsUser: {{ .Values.mongo.runAsUser }}
|
||||||
|
runAsGroup: {{ .Values.mongo.runAsGroup }}
|
||||||
|
fsGroup: {{ .Values.mongo.runAsGroup }}
|
||||||
|
containers:
|
||||||
|
- name: mongo
|
||||||
|
image: "{{ .Values.mongo.image.repository }}:{{ .Values.mongo.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.mongo.image.pullPolicy }}
|
||||||
|
args:
|
||||||
|
- mongod
|
||||||
|
- --wiredTigerCacheSizeGB
|
||||||
|
- {{ .Values.mongo.wiredTigerCacheSizeGB | quote }}
|
||||||
|
env:
|
||||||
|
- name: MONGO_INITDB_ROOT_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
key: MONGO_USER
|
||||||
|
- name: MONGO_INITDB_ROOT_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
key: MONGO_PASS
|
||||||
|
{{- if .Values.mongo.auth.initialDatabase }}
|
||||||
|
- name: MONGO_INITDB_DATABASE
|
||||||
|
value: {{ .Values.mongo.auth.initialDatabase | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.mongo.extraEnv }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: mongo
|
||||||
|
containerPort: 27017
|
||||||
|
protocol: TCP
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /data/db
|
||||||
|
- name: config
|
||||||
|
mountPath: /data/configdb
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.mongo.resources | nindent 12 }}
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ include "buildpath.fullname" . }}-mongo-config
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.mongo.dataVolume.accessMode | quote }}
|
||||||
|
storageClassName: {{ .Values.mongo.dataVolume.storageClassName | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.mongo.dataVolume.size | quote }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{{- if .Values.secrets.riotApiKey }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ include "buildpath.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "buildpath.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
RIOT_API_KEY: {{ .Values.secrets.riotApiKey | quote }}
|
||||||
|
{{- $mongoUser := .Values.secrets.mongoUser | default .Values.mongo.auth.rootUser }}
|
||||||
|
{{- $mongoPass := .Values.secrets.mongoPass | default .Values.mongo.auth.rootPassword }}
|
||||||
|
MONGO_USER: {{ $mongoUser | quote }}
|
||||||
|
MONGO_PASS: {{ $mongoPass | quote }}
|
||||||
|
{{- if .Values.mongo.enabled }}
|
||||||
|
MONGO_HOST: {{ include "buildpath.mongoHost" . | quote }}
|
||||||
|
MONGO_URI: {{ printf "mongodb://%s:%s@%s:27017/" $mongoUser $mongoPass (include "buildpath.mongoHost" .) | quote }}
|
||||||
|
{{- else if .Values.mongo.hostOverride }}
|
||||||
|
MONGO_HOST: {{ .Values.mongo.hostOverride | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
# buildpath Helm chart values
|
||||||
|
# Default values in https://github.com/buildpath/buildpath-chart
|
||||||
|
|
||||||
|
# --- Global / image ---
|
||||||
|
global:
|
||||||
|
# Registry used for the app images.
|
||||||
|
imageRegistry: git.vhaudiquet.fr/vhaudiquet
|
||||||
|
imagePullSecrets: []
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# Mutually override the chart name (used in resource names).
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
# --- MongoDB ---
|
||||||
|
mongo:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: mongo
|
||||||
|
tag: "8.2.11"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# If you run MongoDB outside this chart, set enabled=false and hostOverride
|
||||||
|
# to the address of your external Mongo instance.
|
||||||
|
hostOverride: ""
|
||||||
|
|
||||||
|
# Credentials. The root user is created on first init of the data volume.
|
||||||
|
auth:
|
||||||
|
rootUser: root
|
||||||
|
rootPassword: "change-me-please"
|
||||||
|
# Database name created on first init (optional).
|
||||||
|
initialDatabase: ""
|
||||||
|
|
||||||
|
# WiredTiger cache size (--wiredTigerCacheSizeGB)
|
||||||
|
wiredTigerCacheSizeGB: "2"
|
||||||
|
|
||||||
|
# Run as root, mirrors the compose `user: root:root`.
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 6Gi
|
||||||
|
requests:
|
||||||
|
memory: 3Gi
|
||||||
|
|
||||||
|
# Data volume for /data/db (StatefulSet volumeClaimTemplates)
|
||||||
|
dataVolume:
|
||||||
|
storageClassName: "longhorn"
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 20Gi
|
||||||
|
|
||||||
|
# Config volume for /data/configdb
|
||||||
|
configVolume:
|
||||||
|
storageClassName: "longhorn"
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 1Gi
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 27017
|
||||||
|
|
||||||
|
# Extra env vars to pass to mongo (optional).
|
||||||
|
extraEnv: []
|
||||||
|
|
||||||
|
# --- Shared CDRagon cache (RWX) ---
|
||||||
|
cdragon:
|
||||||
|
enabled: true
|
||||||
|
cacheDir: /cdragon
|
||||||
|
# RWX volume shared between match_collector (writer) and frontend (reader).
|
||||||
|
volume:
|
||||||
|
storageClassName: "longhorn"
|
||||||
|
accessMode: ReadWriteMany
|
||||||
|
size: 5Gi
|
||||||
|
|
||||||
|
# --- frontend (Nuxt) ---
|
||||||
|
frontend:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: lolstats-frontend
|
||||||
|
tag: "latest"
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 3000
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "" # empty => cluster default ingressClass (Traefik)
|
||||||
|
annotations: {}
|
||||||
|
host: buildpath.win
|
||||||
|
# Path matching; Traefik by default does prefix matching on the prefixed path,
|
||||||
|
# but the standard ingress is fine with / => Exact or Prefix.
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
enabled: false
|
||||||
|
# Secret name to reuse an existing TLS cert. If empty and tls.enabled=true,
|
||||||
|
# you must provision a cert (e.g. cert-manager is left to you to wire).
|
||||||
|
secretName: ""
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
|
||||||
|
extraEnv: {}
|
||||||
|
|
||||||
|
# --- match_collector ---
|
||||||
|
# Runs as a CronJob instead of the compose "sleep 12h then run" loop.
|
||||||
|
matchCollector:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: lolstats-match_collector
|
||||||
|
tag: "latest"
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
# Cron schedule in UTC. Default: every 12 hours, mirroring the compose sleep.
|
||||||
|
schedule: "0 */12 * * *"
|
||||||
|
|
||||||
|
# Standard k8s CronJob settings.
|
||||||
|
concurrencyPolicy: Forbid
|
||||||
|
successfulJobsHistoryLimit: 3
|
||||||
|
failedJobsHistoryLimit: 3
|
||||||
|
jobRestartPolicy: Never
|
||||||
|
# seconds the Job is allowed to run before being terminated.
|
||||||
|
activeDeadlineSeconds: 3600
|
||||||
|
# k8s Job backoffLimit (retries on failure).
|
||||||
|
backoffLimit: 2
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 1Gi
|
||||||
|
requests:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 256Mi
|
||||||
|
|
||||||
|
extraEnv: {}
|
||||||
|
|
||||||
|
# --- Secrets ---
|
||||||
|
# The Riot API key and Mongo credentials are stored in a single Secret that
|
||||||
|
# every component mounts as env. Override the values below in your own
|
||||||
|
# values file / external secret.
|
||||||
|
secrets:
|
||||||
|
# Riot Games API key used by match_collector.
|
||||||
|
riotApiKey: "change-me-please"
|
||||||
|
|
||||||
|
# Mongo credentials. They default to the values in mongo.auth above; if you
|
||||||
|
# want different ones in the Secret, override here.
|
||||||
|
# These are exposed to frontend + match_collector as MONGO_USER/MONGO_PASS/MONGO_HOST.
|
||||||
|
mongoUser: ""
|
||||||
|
mongoPass: ""
|
||||||
|
|
||||||
|
# --- Default env vars exposed to frontend and match_collector via a ConfigMap ---
|
||||||
|
# Anything added here becomes an env var on both pods.
|
||||||
|
config:
|
||||||
|
extraEnv: {}
|
||||||
|
# SOME_VAR: "value"
|
||||||
Reference in New Issue
Block a user