added koodo

This commit is contained in:
kaverkiev 2026-01-08 18:46:07 +03:00
parent 8cfb5396ba
commit ab66b19ea5
13 changed files with 681 additions and 0 deletions

View File

@ -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/

View File

@ -0,0 +1,16 @@
apiVersion: v2
name: koodo-reader
description: A modern ebook reader with sync and backup capabilities
type: application
version: 1.0.0
appVersion: "1.7.1"
home: https://github.com/koodo-reader/koodo-reader
icon: https://raw.githubusercontent.com/koodo-reader/koodo-reader/master/public/icons/icon_512x512.png
keywords:
- ebook
- reader
- epub
- pdf
maintainers:
- name: koodo-reader
url: https://github.com/koodo-reader/koodo-reader

View File

@ -0,0 +1,173 @@
# Koodo Reader Helm Chart
Helm chart для развёртывания [Koodo Reader](https://github.com/koodo-reader/koodo-reader) - современного читателя электронных книг с возможностями синхронизации и резервного копирования.
## Описание
Koodo Reader - это кроссплатформенная программа для чтения электронных книг, которая поддерживает множество форматов включая EPUB, PDF, MOBI, AZW3, и другие. Приложение предоставляет удобный веб-интерфейс для чтения и управления библиотекой книг.
## Установка
Чарт автоматически развёртывается через ArgoCD ApplicationSet при добавлении values файла в `values/` директорию.
### Ручная установка (для тестирования)
```bash
helm install koodo-reader ./koodo-reader -f values/home.yaml
```
## Конфигурация
### Основные параметры
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `replicaCount` | Количество реплик | `1` |
| `image.repository` | Docker образ | `ghcr.io/koodo-reader/koodo-reader` |
| `image.tag` | Версия образа | `1.7.1` |
| `image.pullPolicy` | Политика загрузки образа | `IfNotPresent` |
### Service
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `service.enabled` | Включить Service | `true` |
| `service.type` | Тип Service | `ClusterIP` |
| `service.port` | Порт Service | `80` |
### Ingress
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `ingress.enabled` | Включить Ingress | `false` |
| `ingress.className` | Ingress class | `nginx` |
| `ingress.hosts` | Список хостов | `[]` |
| `ingress.tls` | TLS конфигурация | `[]` |
### Persistence
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `persistence.enabled` | Включить постоянное хранилище | `false` |
| `persistence.size` | Размер PVC | `1Gi` |
| `persistence.storageClass` | Storage class | `""` |
| `persistence.accessModes` | Режимы доступа | `[ReadWriteOnce]` |
### Resources
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `resources.limits.cpu` | CPU лимит | не установлен |
| `resources.limits.memory` | Memory лимит | не установлен |
| `resources.requests.cpu` | CPU запрос | не установлен |
| `resources.requests.memory` | Memory запрос | не установлен |
### Autoscaling
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `autoscaling.enabled` | Включить HPA | `false` |
| `autoscaling.minReplicas` | Минимум реплик | `1` |
| `autoscaling.maxReplicas` | Максимум реплик | `3` |
| `autoscaling.targetCPUUtilizationPercentage` | Целевая загрузка CPU | `80` |
## Примеры использования
### Минимальная конфигурация
```yaml
ingress:
enabled: true
hosts:
- host: koodo-reader.example.com
paths:
- path: /
pathType: Prefix
```
### Конфигурация с хранилищем
```yaml
persistence:
enabled: true
size: 10Gi
storageClass: "fast-ssd"
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
```
### Конфигурация с TLS
```yaml
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: books.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: koodo-reader-tls
hosts:
- books.example.com
```
## Развёртывание через ArgoCD
Этот чарт разработан для автоматического развёртывания через ArgoCD ApplicationSet. При создании файла `values/home.yaml` автоматически создастся Application с именем `home-koodo-reader` в namespace `home-koodo-reader`.
### Конфигурация для вашего окружения
В файле `values/home.yaml` уже настроено:
- Домен: `koodo.invuneon.ru`
- TLS сертификат через cert-manager с issuer `letsencrypt-charts-issuer`
- Persistent storage на 5Gi
- Resource limits (CPU: 200m, Memory: 256Mi)
## Доступ к приложению
После развёртывания приложение будет доступно по адресу: **https://koodo.invuneon.ru**
Для локального доступа можно использовать port-forward:
```bash
kubectl port-forward -n home-koodo-reader svc/koodo-reader 8080:80
```
Затем открыть в браузере: http://localhost:8080
## Поддерживаемые форматы
- EPUB (2, 3)
- PDF
- MOBI
- AZW3
- FB2
- CBZ, CBR (комиксы)
- MD (Markdown)
- TXT
## Возможности
- Чтение книг различных форматов
- Управление библиотекой
- Заметки и закладки
- Синхронизация между устройствами
- Резервное копирование библиотеки
- Настройка внешнего вида
- Словарь и перевод
- Голосовое чтение (TTS)
## Дополнительная информация
- [GitHub репозиторий](https://github.com/koodo-reader/koodo-reader)
- [Официальная документация](https://koodo.960960.xyz/)

View File

@ -0,0 +1,20 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host }}{{ $.Values.ingress.path }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "koodo-reader.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 "koodo-reader.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "koodo-reader.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 "koodo-reader.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 }}

View File

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

View File

@ -0,0 +1,86 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "koodo-reader.fullname" . }}
labels:
{{- include "koodo-reader.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
selector:
matchLabels:
{{- include "koodo-reader.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "koodo-reader.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "koodo-reader.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.targetPort }}
protocol: TCP
{{- if .Values.env }}
env:
{{- toYaml .Values.env | nindent 12 }}
{{- end }}
{{- if .Values.livenessProbe.enabled }}
livenessProbe:
{{- toYaml .Values.livenessProbe.httpGet | nindent 12 }}
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
successThreshold: {{ .Values.livenessProbe.successThreshold }}
{{- end }}
{{- if .Values.readinessProbe.enabled }}
readinessProbe:
{{- toYaml .Values.readinessProbe.httpGet | nindent 12 }}
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
successThreshold: {{ .Values.readinessProbe.successThreshold }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- if .Values.persistence.enabled }}
volumeMounts:
- name: data
mountPath: /app/data
{{- end }}
{{- if .Values.persistence.enabled }}
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ include "koodo-reader.fullname" . }}
{{- 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 }}

View File

@ -0,0 +1,32 @@
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "koodo-reader.fullname" . }}
labels:
{{- include "koodo-reader.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "koodo-reader.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,36 @@
{{- if .Values.ingress.enabled -}}
{{- $serviceName := include "koodo-reader.fullname" . -}}
{{- $servicePort := .Values.service.port -}}
{{- $path := .Values.ingress.path | quote -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "koodo-reader.fullname" . }}
labels:
{{- include "koodo-reader.labels" . | nindent 4 }}
annotations:
{{- range $key, $value := .Values.ingress.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec:
{{- if .Values.ingress.className }}
ingressClassName: {{ .Values.ingress.className }}
{{- end }}
rules:
{{- range $host := .Values.ingress.hosts }}
- host: {{ $host }}
http:
paths:
- path: {{ $path }}
pathType: Prefix
backend:
service:
name: {{ $serviceName }}
port:
number: {{ $servicePort }}
{{- end -}}
{{- if .Values.ingress.tls }}
tls:
{{ toYaml .Values.ingress.tls | indent 4 }}
{{- end -}}
{{- end -}}

View File

@ -0,0 +1,27 @@
{{- if .Values.persistence.enabled -}}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ include "koodo-reader.fullname" . }}
labels:
{{- include "koodo-reader.labels" . | nindent 4 }}
{{- with .Values.persistence.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
accessModes:
{{- range .Values.persistence.accessModes }}
- {{ . | quote }}
{{- end }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if (eq "-" .Values.persistence.storageClass) }}
storageClassName: ""
{{- else }}
storageClassName: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,21 @@
{{- if .Values.service.enabled -}}
apiVersion: v1
kind: Service
metadata:
name: {{ include "koodo-reader.fullname" . }}
labels:
{{- include "koodo-reader.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 "koodo-reader.selectorLabels" . | nindent 4 }}
{{- end }}

View File

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

View File

@ -0,0 +1,104 @@
replicaCount: 1
image:
repository: ghcr.io/koodo-reader/koodo-reader
pullPolicy: IfNotPresent
tag: "1.7.1"
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
create: true
annotations: {}
name: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
enabled: true
type: ClusterIP
port: 80
targetPort: 80
annotations: {}
ingress:
enabled: false
className: "nginx"
annotations: {}
# cert-manager.io/cluster-issuer: letsencrypt-prod
# kubernetes.io/ingress.allow-http: "false"
hosts:
- koodo-reader.local
path: /
tls: []
# - secretName: koodo-reader-tls
# hosts:
# - koodo-reader.local
resources: {}
# limits:
# cpu: 200m
# memory: 256Mi
# requests:
# cpu: 100m
# memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 3
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
persistence:
enabled: false
storageClass: ""
accessModes:
- ReadWriteOnce
size: 1Gi
annotations: {}
env: []
# - name: REACT_APP_API_URL
# value: "https://api.example.com"
livenessProbe:
enabled: true
httpGet:
path: /
port: http
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
successThreshold: 1
readinessProbe:
enabled: true
httpGet:
path: /
port: http
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
successThreshold: 1

View File

@ -0,0 +1,69 @@
#ENC[AES256_GCM,data:/5/MIVmhoFruZHxAliRYGg6XRgb876QELgd72D6eCKzJFL0PKkxnD6yVr5jcQLbr,iv:cH6qlSh/qajQ+1ZPSLasexR/vNF/NXoBv2QYafKbIro=,tag:l1zk1xr/QeaUemRa0q5t6Q==,type:comment]
replicaCount: ENC[AES256_GCM,data:oQ==,iv:0IKdT3BDXyDS5q1DJBmQ0sesTiRx/BC0YSB+bjORIhM=,tag:STMhFDMrMs4gMvPtVAkfgA==,type:int]
image:
repository: ENC[AES256_GCM,data:tCTGpNw7ntD8Ut1Mqm5E8M8sO05y9qDzhkyPAlTLp0Lw,iv:K/+az56mYtf+euX0dUE+KnQbXVZigUopE1mQsFXgL8g=,tag:1TfkQHMbLuzE4NrTIx59YQ==,type:str]
tag: ENC[AES256_GCM,data:Sjmo3dA=,iv:qJdvfWaAi6MZqnvrEvTkkIQLccg9BsCr25z0F+Q0sGs=,tag:fdFRxLd5Jrbc6THjpWNAYg==,type:str]
pullPolicy: ENC[AES256_GCM,data:aQfMnzCRpIlyOiFZ,iv:UIN3CKuKihj154o++0dx5pY3Y3avX4Tuq4z7P9L1ob0=,tag:IkCqsmqD6o2aHhlo3nYZvw==,type:str]
service:
enabled: ENC[AES256_GCM,data:uot3JQ==,iv:aohO9DYkEaxRq4NuNpwFhRNC7YWong/x2smg79OZ8iM=,tag:dNMxAlYvx2yAC+yIayE1yA==,type:bool]
type: ENC[AES256_GCM,data:LmFLrFJ6kf0R,iv:3/XqtbnGB2yggKIwgjWRtnKeZ8XB1TOj4apO7Ny+v4w=,tag:rUlWQ4kcI3P6XE6WOZDRpQ==,type:str]
port: ENC[AES256_GCM,data:mso=,iv:0ikaAuMt3Q5hrrRXkOsqdExe50wt6YFpg8BHXVIaCBI=,tag:EAn/hmAccJ/X49Fcpkx0yA==,type:int]
#ENC[AES256_GCM,data:eAA06l5+AlEEw2FMUkbW8ilWH8iKhYieGdW8mRftUA==,iv:EAzS0L9GmrA+iZwhcTYien1phImbKx2VUmTfRqiwd5s=,tag:NhyXCODpqPe74zn5z+8e0w==,type:comment]
ingress:
enabled: ENC[AES256_GCM,data:Wqq6Ww==,iv:cHnzR4lUn9Y+xhWAHuaUYam1ypfOPAL23AzJxEUHjVs=,tag:xynCE3Tg8GEf4skVvFf4Vw==,type:bool]
hosts:
- ENC[AES256_GCM,data:ylZP44P00xncBkrG4Jp5dkM=,iv:RQZY+oTTKaJPXFq1VEdmXYVQZmkBunUVX8hvUFRpwgU=,tag:t3tQ9ksb40lMaR8ARgN0MQ==,type:str]
path: ENC[AES256_GCM,data:xg==,iv:nt5VsZgBs9Ab5N41Kjjtna/j9TlyBc3UMY0ootl4ycY=,tag:cMkNsHKxAzNxrwCP9vTawA==,type:str]
annotations:
cert-manager.io/cluster-issuer: ENC[AES256_GCM,data:wxp2zX41uzdAMs2seKRp8IqrfGGxdY3FXA==,iv:WSXp07Mss3toLsesGLJiq41jv+KQssx79v2UL40jrgc=,tag:qO5zQ06gPc7Aomlj/dTuuQ==,type:str]
kubernetes.io/ingress.allow-http: ENC[AES256_GCM,data:2LVTmQ==,iv:+JMgkVZAWZEVPIjabbxmKbSRI9NWpbUnLwE/i/0kFSc=,tag:QAlTkugJOchAvNwLrucNrg==,type:str]
tls:
- hosts:
- ENC[AES256_GCM,data:avpEstWvOX6uCGH+3CFpmvs=,iv:7PNEIxpAzCrlDPvLsn0cV21lp3zFI4ld/Nonc+I1Xq8=,tag:H5QdK85DQg4zmdGUthYuJA==,type:str]
secretName: ENC[AES256_GCM,data:FMkwVvq4d9Vi,iv:d6Fx5pVbdcoYCdzZ8eJu0ApYE8e4Y7p/WQljAlaBJ3Y=,tag:8IyiZD3KLFD0RrCqyE4QjQ==,type:str]
resources:
limits:
cpu: ENC[AES256_GCM,data:D6fl9Q==,iv:zov1d25L4Dk7jRuiOMd3EaVCj5gad6kenJDKidKX2qY=,tag:WbRwyZUZe3s+hK5/vBNkZA==,type:str]
memory: ENC[AES256_GCM,data:oZNELUw=,iv:o61/KDHXsla2BmQkhTMIJVLwNs0CzFvLCieUJjAMgKw=,tag:eP6fhWRKsmNK+iaQRg3Fqg==,type:str]
requests:
cpu: ENC[AES256_GCM,data:KgKJ,iv:N+T1Ir3vFmuCWAefaAtaU/IGp6WxwNhYY0nJo2rPpNo=,tag:SFkBtn8G0hcDC9c7eE5cww==,type:str]
memory: ENC[AES256_GCM,data:1r9+lx8=,iv:Nq2aml6/YF6KzmSYuyUz0onmtZYjc4FeDjcUYcX6Ebg=,tag:JxdRn/CVZezUSrj+xUtiUQ==,type:str]
persistence:
enabled: ENC[AES256_GCM,data:qI7n5Q==,iv:m8WxGtq9mSBsCWQ0pSIPY27/I5+YdUxyTGFwJUJB0kI=,tag:edsVuYoJz0+WuwYYEdSD3w==,type:bool]
storageClass: ""
accessModes:
- ENC[AES256_GCM,data:41j++ncvdElDytmAgQ==,iv:0jCF3J5AqHS/a1jDNwqn8vh6OYniMhT75cXJ5d7Qg7I=,tag:pskB6vW4aNufj0zMokSTJw==,type:str]
size: ENC[AES256_GCM,data:OPxz,iv:YHgrvEqXQvmHlnbXP5QCqoJWUKuPRl/y6XkBw8kTAfY=,tag:oOqjGMRCZruHN9BEvuInxQ==,type:str]
livenessProbe:
enabled: ENC[AES256_GCM,data:hKJQGw==,iv:n9Kd46LGUC5kOIj8CfWZIyGkgRYYXUZOORElerbKp+c=,tag:fzJjhdozkEe7ZpaFwZIj1g==,type:bool]
httpGet:
path: ENC[AES256_GCM,data:8w==,iv:dbV7heeVFipu0OzsRFVa5YqD6bmwSdx73iwOyl3eQbM=,tag:LqzxMmZprSbnCEUdAAFnXg==,type:str]
port: ENC[AES256_GCM,data:XU20VQ==,iv:NuM/fQERaRPrPJEiRCHjJVt1rLKxE+KJ1QnGMYwNsnk=,tag:ODvq96afBUMwvgXqHY4Fng==,type:str]
initialDelaySeconds: ENC[AES256_GCM,data:wck=,iv:GzfpPN3dZr7ulW52PA81j6V62fNSV7SNthdvgi6X8eQ=,tag:AnjeBMQXHDegsKfx6aoCxg==,type:int]
periodSeconds: ENC[AES256_GCM,data:/QM=,iv:NuMhqx449HKTj4JXCUgqGVzLypZ/3HGBL5kf9wrYtcc=,tag:J6Q5nd1QTqZql1MkdWMNvw==,type:int]
timeoutSeconds: ENC[AES256_GCM,data:8w==,iv:Q8diTyh/oEmCDGcpBsbmgPC6yUlhgf8RtxV+vKy9hkY=,tag:IJERCsRQtRXL954wp4CdEw==,type:int]
failureThreshold: ENC[AES256_GCM,data:Fw==,iv:hgmOtjsQi+LWF2QY7ZbCU2P6zDMomxW8VcVr/7Buzvc=,tag:62yY0zdZEcnPgFq9JH6k+Q==,type:int]
readinessProbe:
enabled: ENC[AES256_GCM,data:vhorWw==,iv:voTAMsXGRLGh7zmlTjA+7PuttwK5Fgfbt9DEqOKPEqI=,tag:FJEZVuF5to0UrrwVCZYQGw==,type:bool]
httpGet:
path: ENC[AES256_GCM,data:Aw==,iv:EoKqrJqwFtAWOk6UyevSnXE3e89GJSXNjQ54hl0QMj4=,tag:9ZScjB/cPVLBg/eXu6gFuw==,type:str]
port: ENC[AES256_GCM,data:0eCPyQ==,iv:zDcCbyH9dkz2ofzxtjsZoXAyb3M/Zienj9sOQnNBHqA=,tag:3twBXSuS18PH0lijeBPS0Q==,type:str]
initialDelaySeconds: ENC[AES256_GCM,data:0w==,iv:1Jkssg4hwK/19+oV3cMa8EsZDI9wfIgie81yl7zKVhU=,tag:MulxS6afJEoeincZHysPjA==,type:int]
periodSeconds: ENC[AES256_GCM,data:DQ==,iv:rEiqtg+Z04ujp07jMVTqVMB7eBw33vUXeXWnfO5Sa4M=,tag:qiGhR6q1C1AmfQykHJqCHg==,type:int]
timeoutSeconds: ENC[AES256_GCM,data:TQ==,iv:Zef1smMyI7QiqZw2uReTnbxcASF2+7O9ue/t5Cr0JFE=,tag:msvWi5bp7PcVTU2MC0B+ew==,type:int]
failureThreshold: ENC[AES256_GCM,data:Nw==,iv:hXkjxKmHIeIj+XPE9Px8srXsymIL0J/uQOVj/Z1vq8g=,tag:WCgnnS8uQZtIcS007iF+/w==,type:int]
sops:
age:
- recipient: age1s476478zx2klmkst79paaucw9vec9gkfgjtmzhqzdffmpkkmmf4s5x0nu0
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4WjZvRFpRU21LSWs2a0Z6
TWtQYnVHcUdDMi96OWpnK25ReE1CanVlenlBCjBLd05GY1FUNUpVOWJTRVg4bWl0
MzA3RnRsK1VWRUROejVPaTJLSnNhRVEKLS0tIEdJZGtZc0ZIQjlCU3FXbDVPS0o3
c1o1dHFRNnByb3FNbXZOeXRkYnBhUU0Ki5BgqZvurkW+clOyEs7Wdbxl4+gDZ+gN
ruiXxp8iPjmmRDeWQk/BkpRcGfFExf0tTFZ5+h9aw+5JGk+FafrOCQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-01-08T15:44:38Z"
mac: ENC[AES256_GCM,data:iX5rsCUmSHijE8gQ9Tagnwjv10MrjL0U/eVoFZAGnNm57NoBQtVOkWAKFOox9mPkb4QLeJcnfFIEyCuPTxEmsl04T2vTVK68YwEmLZ/f0OW03KAX9LvFP7iCHlo8DMdUY9Fcp+//N4tfL9N4UUSDjPBcBFfsNchCpCgitAG4j3k=,iv:INidLdGnord35M7wFHd0SxgwkqkeA5V+cA/Umb3Ehj4=,tag:Rphvqh/N8vtvgntn58vxvA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2