From baaeeaa607499e1fd2372e23fdcd980386bc9efb Mon Sep 17 00:00:00 2001 From: WrenIX Date: Fri, 14 Mar 2025 12:05:03 +0100 Subject: [PATCH] fix(mollysocket): init --- mollysocket/.helmignore | 23 + mollysocket/Chart.yaml | 24 + mollysocket/README.md | 105 +++ mollysocket/_docs.gotmpl | 0 .../mollysocket-default.json | 718 ++++++++++++++++++ mollysocket/templates/NOTES.txt | 22 + mollysocket/templates/_helpers.tpl | 62 ++ mollysocket/templates/configmap.yaml | 14 + .../configmap_grafana_dashboards.yaml | 18 + mollysocket/templates/deployment.yaml | 99 +++ mollysocket/templates/hpa.yaml | 28 + mollysocket/templates/ingress.yaml | 61 ++ mollysocket/templates/prometheus-rules.yaml | 17 + mollysocket/templates/pvc.yaml | 50 ++ mollysocket/templates/secret.yaml | 25 + mollysocket/templates/service.yaml | 15 + mollysocket/templates/serviceaccount.yaml | 12 + mollysocket/templates/servicemonitor.yaml | 18 + mollysocket/templates/setup/job.yaml | 66 ++ mollysocket/templates/setup/role.yaml | 26 + mollysocket/templates/setup/rolebinding.yaml | 23 + .../templates/setup/serviceaccount.yaml | 13 + mollysocket/values.yaml | 156 ++++ 23 files changed, 1595 insertions(+) create mode 100644 mollysocket/.helmignore create mode 100644 mollysocket/Chart.yaml create mode 100644 mollysocket/README.md create mode 100644 mollysocket/_docs.gotmpl create mode 100644 mollysocket/grafana_dashboards/mollysocket-default.json create mode 100644 mollysocket/templates/NOTES.txt create mode 100644 mollysocket/templates/_helpers.tpl create mode 100644 mollysocket/templates/configmap.yaml create mode 100644 mollysocket/templates/configmap_grafana_dashboards.yaml create mode 100644 mollysocket/templates/deployment.yaml create mode 100644 mollysocket/templates/hpa.yaml create mode 100644 mollysocket/templates/ingress.yaml create mode 100644 mollysocket/templates/prometheus-rules.yaml create mode 100644 mollysocket/templates/pvc.yaml create mode 100644 mollysocket/templates/secret.yaml create mode 100644 mollysocket/templates/service.yaml create mode 100644 mollysocket/templates/serviceaccount.yaml create mode 100644 mollysocket/templates/servicemonitor.yaml create mode 100644 mollysocket/templates/setup/job.yaml create mode 100644 mollysocket/templates/setup/role.yaml create mode 100644 mollysocket/templates/setup/rolebinding.yaml create mode 100644 mollysocket/templates/setup/serviceaccount.yaml create mode 100644 mollysocket/values.yaml diff --git a/mollysocket/.helmignore b/mollysocket/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/mollysocket/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/mollysocket/Chart.yaml b/mollysocket/Chart.yaml new file mode 100644 index 0000000..0b7d6d2 --- /dev/null +++ b/mollysocket/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: mollysocket +description: Deploy mollysocket into kubernetes +icon: "https://avatars.githubusercontent.com/u/58849401?s=200&v=4" +type: application +version: "0.1.0" +# renovate: image=ghcr.io/mollyim/mollysocket +appVersion: "1.6.0" + +home: "https://molly.im/" +sources: + - "https://github.com/mollyim/mollyim-android" + - "https://github.com/mollyim/mollysocket" + +maintainers: + - name: WrenIX + url: https://wrenix.eu + +keywords: + - "unifiedpush" + - "mollysocket" + - "molly" + - "messenger" + - "signal" diff --git a/mollysocket/README.md b/mollysocket/README.md new file mode 100644 index 0000000..29e16b9 --- /dev/null +++ b/mollysocket/README.md @@ -0,0 +1,105 @@ +--- +title: "mollysocket" + +description: "Deploy mollysocket into kubernetes" + +--- + +# mollysocket + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.6.0](https://img.shields.io/badge/AppVersion-1.6.0-informational?style=flat-square) + +Deploy mollysocket into kubernetes + +**Homepage:** + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| WrenIX | | | + +## Source Code + +* +* + +## Usage + +Helm must be installed and setup to your kubernetes cluster to use the charts. +Refer to Helm's [documentation](https://helm.sh/docs) to get started. +Once Helm has been set up correctly, fetch the charts as follows: + +```bash +helm pull oci://codeberg.org/wrenix/helm-charts/mollysocket +``` + +You can install a chart release using the following command: + +```bash +helm install mollysocket-release oci://codeberg.org/wrenix/helm-charts/mollysocket --values values.yaml +``` + +To uninstall a chart release use `helm`'s delete command: + +```bash +helm uninstall mollysocket-release +``` + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| autoscaling.enabled | bool | `false` | | +| autoscaling.maxReplicas | int | `100` | | +| autoscaling.minReplicas | int | `1` | | +| autoscaling.targetCPUUtilizationPercentage | int | `80` | | +| fullnameOverride | string | `""` | | +| global.image.pullPolicy | string | `nil` | if set it will overwrite all pullPolicy | +| global.image.registry | string | `nil` | if set it will overwrite all registry entries | +| grafana.dashboards.annotations | object | `{}` | | +| grafana.dashboards.enabled | bool | `false` | | +| grafana.dashboards.labels.grafana_dashboard | string | `"1"` | | +| image.pullPolicy | string | `"IfNotPresent"` | This sets the pull policy for images. (could be overwritten by global.image.pullPolicy) | +| image.registry | string | `"ghcr.io"` | image registry (could be overwritten by global.image.registry) | +| image.repository | string | `"mollyim/mollysocket"` | image repository | +| image.tag | string | `""` | image tag - Overrides the image tag whose default is the chart appVersion. | +| imagePullSecrets | list | `[]` | | +| ingress.annotations | object | `{}` | | +| ingress.className | string | `""` | | +| ingress.enabled | bool | `false` | | +| ingress.hosts[0].host | string | `"chart-example.local"` | | +| ingress.hosts[0].paths[0].path | string | `"/"` | | +| ingress.hosts[0].paths[0].pathType | string | `"ImplementationSpecific"` | | +| ingress.tls | list | `[]` | | +| mollysocket.allowedEnpoints[0] | string | `"*"` | | +| mollysocket.allowedUUIDs[0] | string | `"*"` | | +| mollysocket.environment | string | `"Prod"` | | +| mollysocket.log | string | `"info"` | | +| mollysocket.vapidKey.create | bool | `true` | generate a vapid key | +| mollysocket.vapidKey.key | string | `""` | use own vapid key | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| persistence.accessMode | string | `"ReadWriteOnce"` | | +| persistence.annotations | object | `{}` | | +| persistence.enabled | bool | `true` | | +| persistence.size | string | `"1Gi"` | | +| podAnnotations | object | `{}` | | +| podSecurityContext | object | `{}` | | +| prometheus.rules.additionalRules | list | `[]` | | +| prometheus.rules.enabled | bool | `false` | | +| prometheus.rules.labels | object | `{}` | | +| prometheus.servicemonitor.enabled | bool | `false` | | +| prometheus.servicemonitor.labels | object | `{}` | | +| replicaCount | int | `1` | replicas | +| resources | object | `{}` | | +| securityContext | object | `{}` | | +| service.port | int | `80` | | +| service.type | string | `"ClusterIP"` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.name | string | `""` | | +| tolerations | list | `[]` | | + +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs) diff --git a/mollysocket/_docs.gotmpl b/mollysocket/_docs.gotmpl new file mode 100644 index 0000000..e69de29 diff --git a/mollysocket/grafana_dashboards/mollysocket-default.json b/mollysocket/grafana_dashboards/mollysocket-default.json new file mode 100644 index 0000000..1586058 --- /dev/null +++ b/mollysocket/grafana_dashboards/mollysocket-default.json @@ -0,0 +1,718 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": false, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 42, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 5, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(mollysocket_connections)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 8, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(mollysocket_reconnections)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Reconnections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 10, + "y": 0 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(mollysocket_pushs)by(type)", + "legendFormat": "{{type}}", + "range": true, + "refId": "A" + } + ], + "title": "Pushes", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 17, + "y": 0 + }, + "id": 10, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(mollysocket_messages)by(type)", + "legendFormat": "{{type}}", + "range": true, + "refId": "A" + } + ], + "title": "Messages", + "type": "stat" + }, + { + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 7, + "title": "Graph", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "mollysocket_connections", + "hide": false, + "legendFormat": "{{ namespace }}/{{ pod }}", + "range": true, + "refId": "A" + } + ], + "title": "Connections", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "irate(mollysocket_reconnections[$__interval])", + "hide": false, + "legendFormat": "{{ namespace }}/{{ pod }}", + "range": true, + "refId": "B" + } + ], + "title": "Reconnection (Rate)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "irate(mollysocket_pushs[$__interval])", + "hide": false, + "legendFormat": "{{ namespace }}/{{ pod }}/{{ type }}", + "range": true, + "refId": "A" + } + ], + "title": "Push (Rate)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "irate(mollysocket_messages[$__interval])", + "hide": false, + "legendFormat": "{{ namespace }}/{{ pod }}/{{ type }}", + "range": true, + "refId": "B" + } + ], + "title": "Messages (Rate)", + "transparent": true, + "type": "timeseries" + } + ], + "refresh": "1m", + "schemaVersion": 37, + "style": "dark", + "tags": [ + "UnifiedPush", + "Apps", + "Signal", + "Molly" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, + "hide": 0, + "includeAll": false, + "label": "DataSource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "MollySocket", + "uid": "mollysocket", + "version": 2, + "weekStart": "" +} diff --git a/mollysocket/templates/NOTES.txt b/mollysocket/templates/NOTES.txt new file mode 100644 index 0000000..0451aef --- /dev/null +++ b/mollysocket/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "mollysocket.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "mollysocket.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "mollysocket.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "mollysocket.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/mollysocket/templates/_helpers.tpl b/mollysocket/templates/_helpers.tpl new file mode 100644 index 0000000..de18d3c --- /dev/null +++ b/mollysocket/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "mollysocket.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 "mollysocket.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 "mollysocket.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "mollysocket.labels" -}} +helm.sh/chart: {{ include "mollysocket.chart" . }} +{{ include "mollysocket.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "mollysocket.selectorLabels" -}} +app.kubernetes.io/name: {{ include "mollysocket.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mollysocket.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "mollysocket.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/mollysocket/templates/configmap.yaml b/mollysocket/templates/configmap.yaml new file mode 100644 index 0000000..c8b00e6 --- /dev/null +++ b/mollysocket/templates/configmap.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + annotations: + configmap-hash: {{ .Values.mollysocket | toYaml | sha256sum }} +data: + molly.toml: |- + environment = "{{ .Values.mollysocket.environment }}" + allowed_uuids = {{ .Values.mollysocket.allowedUUIDs | toJson }} + allowed_endpoints = {{ .Values.mollysocket.allowedEnpoints | toJson }} + db = "/database/molly.sqlite" diff --git a/mollysocket/templates/configmap_grafana_dashboards.yaml b/mollysocket/templates/configmap_grafana_dashboards.yaml new file mode 100644 index 0000000..f887560 --- /dev/null +++ b/mollysocket/templates/configmap_grafana_dashboards.yaml @@ -0,0 +1,18 @@ +{{- if .Values.grafana.dashboards.enabled }} +{{- range $path, $bytes := .Files.Glob "grafana_dashboards/*.json" }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "mollysocket.fullname" $ }}-grafana-dashboards-{{ base $path }} + labels: + {{- include "mollysocket.labels" $ | nindent 4 }} + {{- with $.Values.grafana.dashboards.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + annotations: + {{- toYaml $.Values.grafana.dashboards.annotations | nindent 4 }} +data: + {{- ($.Files.Glob $path ).AsConfig | nindent 2 }} +{{- end }} +{{- end }} diff --git a/mollysocket/templates/deployment.yaml b/mollysocket/templates/deployment.yaml new file mode 100644 index 0000000..c9c1b30 --- /dev/null +++ b/mollysocket/templates/deployment.yaml @@ -0,0 +1,99 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "mollysocket.selectorLabels" . | nindent 6 }} + template: + metadata: + annotations: + configmap-hash: {{ .Values.mollysocket | toYaml | sha256sum }} + {{- with .Values.podAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "mollysocket.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "mollysocket.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + {{- with .Values.image }} + image: "{{ coalesce $.Values.global.image.registry .registry }}/{{ .repository }}:{{ .tag | default $.Chart.AppVersion }}" + imagePullPolicy: {{ coalesce $.Values.global.image.pullPolicy .pullPolicy }} + {{- end }} + args: + - "server" + ports: + - name: http + containerPort: 8020 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + env: + - name: "RUST_LOG" + value: "{{ .Values.mollysocket.log }}" + - name: "ROCKET_ADDRESS" + value: "0.0.0.0" + - name: "ROCKET_PROMETHEUS_NAMESPACE" + value: "mollysocket" + - name: "MOLLY_VAPID_KEY_FILE" + value: "/secret/ms_vapid_key" + - name: "MOLLY_CONF" + value: "/config/molly.toml" + volumeMounts: + - mountPath: "/config" + name: "config" + - mountPath: "/secret" + name: "secret" + - mountPath: "/database" + name: "database" + volumes: + - name: "config" + configMap: + name: {{ include "mollysocket.fullname" . }} + - name: "secret" + secret: + secretName: {{ include "mollysocket.fullname" . }} + - name: "database" + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ if .Values.persistence.existingClaim }}{{ .Values.persistence.existingClaim }}{{- else }}{{ template "mollysocket.fullname" . }}{{- end }} + {{- else }} + emptyDir: {} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/mollysocket/templates/hpa.yaml b/mollysocket/templates/hpa.yaml new file mode 100644 index 0000000..c6f5713 --- /dev/null +++ b/mollysocket/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "mollysocket.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/mollysocket/templates/ingress.yaml b/mollysocket/templates/ingress.yaml new file mode 100644 index 0000000..1423f89 --- /dev/null +++ b/mollysocket/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "mollysocket.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/mollysocket/templates/prometheus-rules.yaml b/mollysocket/templates/prometheus-rules.yaml new file mode 100644 index 0000000..ce9670d --- /dev/null +++ b/mollysocket/templates/prometheus-rules.yaml @@ -0,0 +1,17 @@ +{{- if and .Values.prometheus.rules.enabled ( .Capabilities.APIVersions.Has "monitoring.coreos.com/v1" ) }} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- with .Values.prometheus.rules.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + groups: + {{- if .Values.prometheus.rules.additionalRules }} + - name: {{ template "mollysocket.fullname" . }}-Additional + rules: {{- toYaml .Values.prometheus.rules.additionalRules | nindent 4 }} + {{- end }} +{{- end }} diff --git a/mollysocket/templates/pvc.yaml b/mollysocket/templates/pvc.yaml new file mode 100644 index 0000000..9902d07 --- /dev/null +++ b/mollysocket/templates/pvc.yaml @@ -0,0 +1,50 @@ +{{- if and .Values.persistence.enabled ( not .Values.persistence.existingClaim) -}} +--- +{{- if .Values.persistence.hostPath }} +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ template "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- if .Values.persistence.annotations }} + annotations: + {{ toYaml .Values.persistence.annotations | indent 4 }} + {{- end }} +spec: + storageClassName: manual + capacity: + storage: {{ .Values.persistence.size | quote }} + accessModes: + - {{ .Values.persistence.accessMode | quote }} + hostPath: + path: "{{ .Values.persistence.hostPath }}" +--- +{{- end }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- if .Values.persistence.annotations }} + annotations: + {{ toYaml .Values.persistence.annotations | indent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} + {{- if .Values.persistence.storageClass }} + {{- if (eq "-" .Values.persistence.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: "{{ .Values.persistence.storageClass }}" + {{- end }} + {{- end }} + {{- if .Values.persistence.hostPath }} + volumeName: {{ template "mollysocket.fullname" . }} + {{- end }} +{{- end -}} \ No newline at end of file diff --git a/mollysocket/templates/secret.yaml b/mollysocket/templates/secret.yaml new file mode 100644 index 0000000..3ca341b --- /dev/null +++ b/mollysocket/templates/secret.yaml @@ -0,0 +1,25 @@ +--- +{{- $fullname := include "mollysocket.fullname" . }} +{{- $vapidKey := .Values.mollysocket.vapidKey.key }} +{{- with (lookup "v1" "Secret" .Release.Namespace $fullname) }} +{{- with get . "data" }} +{{- $vapidKey = $vapidKey | default (get . "ms_vapid_key" | b64dec) }} +{{- end }} +{{- end }} + + +apiVersion: v1 +kind: Secret +metadata: + name: {{ $fullname }} + annotations: + "helm.sh/hook": pre-install,pre-upgrade + helm.sh/resource-policy: keep + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": hook-failed + labels: + {{- include "mollysocket.labels" . | nindent 4 }} +data: + {{- with $vapidKey }} + ms_vapid_key: {{ . | b64enc }} + {{- end }} diff --git a/mollysocket/templates/service.yaml b/mollysocket/templates/service.yaml new file mode 100644 index 0000000..24dc6d1 --- /dev/null +++ b/mollysocket/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "mollysocket.selectorLabels" . | nindent 4 }} diff --git a/mollysocket/templates/serviceaccount.yaml b/mollysocket/templates/serviceaccount.yaml new file mode 100644 index 0000000..4abb43b --- /dev/null +++ b/mollysocket/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "mollysocket.serviceAccountName" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/mollysocket/templates/servicemonitor.yaml b/mollysocket/templates/servicemonitor.yaml new file mode 100644 index 0000000..8e21a89 --- /dev/null +++ b/mollysocket/templates/servicemonitor.yaml @@ -0,0 +1,18 @@ +{{- if and .Values.prometheus.servicemonitor.enabled ( .Capabilities.APIVersions.Has "monitoring.coreos.com/v1" ) }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "mollysocket.fullname" . }} + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + {{- with .Values.prometheus.servicemonitor.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + endpoints: + - port: http + path: /metrics + selector: + matchLabels: + {{- include "mollysocket.selectorLabels" . | nindent 6 }} +{{- end }} diff --git a/mollysocket/templates/setup/job.yaml b/mollysocket/templates/setup/job.yaml new file mode 100644 index 0000000..6b209e5 --- /dev/null +++ b/mollysocket/templates/setup/job.yaml @@ -0,0 +1,66 @@ +{{- if .Values.mollysocket.vapidKey.create }} +--- +{{- $fullname := (include "mollysocket.fullname" .) }} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ $fullname }}-setup + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + app.kubernetes.io/component: setup-job + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +spec: + template: + metadata: + labels: + {{- include "mollysocket.labels" . | nindent 8 }} + app.kubernetes.io/component: setup-job + spec: + restartPolicy: "Never" + serviceAccount: {{ $fullname }}-setup + initContainers: + - name: generate-config + {{- with $.Values.image }} + image: "{{ coalesce $.Values.global.image.registry .registry }}/{{ .repository }}:{{ .tag | default $.Chart.AppVersion }}" + imagePullPolicy: {{ coalesce $.Values.global.image.pullPolicy .pullPolicy }} + {{- end }} + command: + - sh + - -c + - mollysocket vapid generate > /data/output + volumeMounts: + - mountPath: /data/ + name: data + containers: + - name: upload-config + {{- with $.Values.kubectl.image }} + image: "{{ coalesce $.Values.global.image.registry .registry }}/{{ .repository }}:{{ .tag }}" + imagePullPolicy: {{ coalesce $.Values.global.image.pullPolicy .pullPolicy }} + {{- end }} + command: + - sh + - -c + - | + # check if key already exists + key=$(kubectl get secret {{ $fullname }} -o jsonpath="{.data['ms_vapid_key']}" 2> /dev/null) + [ $? -ne 0 ] && echo "Failed to get existing secret" && exit 1 + [ -n "$key" ] && echo "Config already created, exiting." && exit 0 + # update secret + kubectl patch secret {{ $fullname }} -p '{"data":{"ms_vapid_key":"'$(cat /data/output | base64 -w 0)'"}}' + [ $? -ne 0 ] && echo "Failed to update secret." && exit 1 + echo "VAPID successfully setup" + volumeMounts: + - mountPath: /data/ + name: data + readOnly: true + + volumes: + - name: data + emptyDir: {} + parallelism: 1 + completions: 1 + backoffLimit: 1 +{{- end }} diff --git a/mollysocket/templates/setup/role.yaml b/mollysocket/templates/setup/role.yaml new file mode 100644 index 0000000..7bed2d1 --- /dev/null +++ b/mollysocket/templates/setup/role.yaml @@ -0,0 +1,26 @@ +{{- if .Values.mollysocket.vapidKey.create }} +--- +{{- $fullname := (include "mollysocket.fullname" .) }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ $fullname }}-setup + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + app.kubernetes.io/component: setup-job + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +rules: + - apiGroups: + - "" + resources: + - secrets + resourceNames: + - {{ $fullname }} + verbs: + - get + - update + - patch +{{- end }} diff --git a/mollysocket/templates/setup/rolebinding.yaml b/mollysocket/templates/setup/rolebinding.yaml new file mode 100644 index 0000000..c356f0d --- /dev/null +++ b/mollysocket/templates/setup/rolebinding.yaml @@ -0,0 +1,23 @@ +{{- if .Values.mollysocket.vapidKey.create }} +--- +{{- $fullname := (include "mollysocket.fullname" .) }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ $fullname }}-setup + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + app.kubernetes.io/component: setup-job + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ $fullname }}-setup +subjects: + - kind: ServiceAccount + name: {{ $fullname }}-setup + namespace: {{ .Release.Namespace }} +{{- end }} diff --git a/mollysocket/templates/setup/serviceaccount.yaml b/mollysocket/templates/setup/serviceaccount.yaml new file mode 100644 index 0000000..be5fcc8 --- /dev/null +++ b/mollysocket/templates/setup/serviceaccount.yaml @@ -0,0 +1,13 @@ +{{- if .Values.mollysocket.vapidKey.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "mollysocket.fullname" . }}-setup + labels: + {{- include "mollysocket.labels" . | nindent 4 }} + app.kubernetes.io/component: setup-job + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +{{- end }} diff --git a/mollysocket/values.yaml b/mollysocket/values.yaml new file mode 100644 index 0000000..966e509 --- /dev/null +++ b/mollysocket/values.yaml @@ -0,0 +1,156 @@ +global: + image: + # -- if set it will overwrite all registry entries + registry: + # -- if set it will overwrite all pullPolicy + pullPolicy: + + +# -- replicas +replicaCount: 1 + +image: + # -- image registry (could be overwritten by global.image.registry) + registry: ghcr.io + # -- image repository + repository: mollyim/mollysocket + # -- This sets the pull policy for images. (could be overwritten by global.image.pullPolicy) + pullPolicy: IfNotPresent + # -- image tag - Overrides the image tag whose default is the chart appVersion. + tag: "" + +kubectl: + # -- image needed for setup (store generated VAPID / WebPush keys) + image: + registry: docker.io + repository: bitnami/kubectl + pullPolicy: IfNotPresent + tag: 1.32.3 + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +mollysocket: + log: "info" + environment: "Prod" + allowedUUIDs: + - "*" + allowedEnpoints: + - "*" + vapidKey: + # -- generate a vapid key + create: true + # -- use own vapid key + key: "" + +## Enable persistence using Persistent Volume Claims +## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ +## +persistence: + # Upload (/var/www/html) + enabled: true + annotations: {} + ## mobilizon data Persistent Volume Storage Class + ## If defined, storageClassName: + ## 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: "-" + + ## A manually managed Persistent Volume and Claim + ## Requires persistence.enabled: true + ## If defined, PVC must be created manually before volume will be bound + # existingClaim: + + ## Create a PV on Node with given hostPath + ## storageClass has to be manual + # hostPath: + accessMode: ReadWriteOnce + size: 1Gi + +prometheus: + servicemonitor: + enabled: false + labels: {} + rules: + enabled: false + labels: {} + # current no default alertrules are provided + additionalRules: [] + +grafana: + dashboards: + enabled: false + labels: + grafana_dashboard: "1" + annotations: {} + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {}