Skip to content

Commit 81c343c

Browse files
committed
kestra
1 parent 63cc95c commit 81c343c

File tree

4 files changed

+248
-0
lines changed

4 files changed

+248
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
apiVersion: v2
3+
name: kestra
4+
version: 1.0.0
5+
dependencies:
6+
- name: kestra
7+
version: "1.0.4" # Ultima versione stabile di Kestra 1.0
8+
repository: https://helm.kestra.io/
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
apiVersion: gateway.networking.k8s.io/v1
3+
kind: HTTPRoute
4+
metadata:
5+
name: kestra-route
6+
namespace: apps
7+
spec:
8+
parentRefs:
9+
- name: cilium-gateway
10+
namespace: kube-system
11+
sectionName: https
12+
hostnames:
13+
- "kestra.local.ildoc.it"
14+
rules:
15+
- matches:
16+
- path:
17+
type: PathPrefix
18+
value: /
19+
backendRefs:
20+
- name: kestra
21+
port: 8080
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
apiVersion: external-secrets.io/v1
3+
kind: ExternalSecret
4+
metadata:
5+
name: vault-kestra-secrets
6+
namespace: apps
7+
spec:
8+
refreshInterval: "1h"
9+
secretStoreRef:
10+
name: vault-kubernetes-secret-store
11+
kind: ClusterSecretStore
12+
target:
13+
name: kestra-secrets
14+
creationPolicy: Owner
15+
template:
16+
engineVersion: v2
17+
data:
18+
# PostgreSQL connection (nel formato che Kestra si aspetta)
19+
application-secrets.yml: |
20+
kestra:
21+
datasources:
22+
postgres:
23+
url: jdbc:postgresql://192.168.0.30:5432/kestra_db
24+
driver-class-name: org.postgresql.Driver
25+
username: {{ .postgres_username }}
26+
password: {{ .postgres_password }}
27+
28+
# Secrets per i workflow (accessibili con secret() function)
29+
# External Secrets già gestisce l'encoding, NON serve b64enc
30+
SECRET_VAULT_ROLE_ID: "{{ .vault_role_id }}"
31+
SECRET_VAULT_SECRET_ID: "{{ .vault_secret_id }}"
32+
SECRET_GITLAB_TOKEN: "{{ .gitlab_token }}"
33+
SECRET_SLACK_WEBHOOK: "{{ .slack_webhook }}"
34+
35+
data:
36+
- secretKey: postgres_username
37+
remoteRef:
38+
key: kubernetes/data/apps/kestra
39+
property: postgres_username
40+
41+
- secretKey: postgres_password
42+
remoteRef:
43+
key: kubernetes/data/apps/kestra
44+
property: postgres_password
45+
46+
- secretKey: vault_role_id
47+
remoteRef:
48+
key: kubernetes/data/apps/kestra
49+
property: vault_role_id
50+
51+
- secretKey: vault_secret_id
52+
remoteRef:
53+
key: kubernetes/data/apps/kestra
54+
property: vault_secret_id
55+
56+
- secretKey: gitlab_token
57+
remoteRef:
58+
key: kubernetes/data/apps/kestra
59+
property: gitlab_token
60+
61+
- secretKey: slack_webhook
62+
remoteRef:
63+
key: kubernetes/data/apps/kestra
64+
property: slack_webhook
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
kestra:
2+
# L'immagine viene presa automaticamente dalla versione del chart
3+
# Non serve specificarla a meno di override necessari
4+
5+
# Deploy standalone (tutti i componenti in un unico pod)
6+
# Per un homelab questo è perfetto
7+
deployments:
8+
standalone:
9+
enabled: true
10+
replicaCount: 1
11+
12+
# Resources (adatta in base al tuo cluster)
13+
resources:
14+
limits:
15+
cpu: 2000m
16+
memory: 4Gi
17+
requests:
18+
cpu: 500m
19+
memory: 2Gi
20+
21+
# Strategy per evitare split-brain con SQLite/H2
22+
strategy:
23+
type: Recreate
24+
25+
# Disabilita deployment separati (non servono per homelab)
26+
webserver:
27+
enabled: false
28+
executor:
29+
enabled: false
30+
indexer:
31+
enabled: false
32+
scheduler:
33+
enabled: false
34+
worker:
35+
enabled: false
36+
37+
# Configurazione comune a tutti i deployment
38+
common:
39+
# Node selector se hai nodi specifici
40+
nodeSelector: {}
41+
42+
tolerations: []
43+
44+
affinity: {}
45+
46+
# Secrets come environment variables
47+
# I secrets verranno caricati da External Secrets / Vault
48+
extraEnvFrom:
49+
- secretRef:
50+
name: kestra-secrets
51+
52+
# Environment variables aggiuntive
53+
extraEnv:
54+
- name: TZ
55+
value: "Europe/Rome"
56+
57+
# Configurazione Kestra (ConfigMap)
58+
# Questo configura PostgreSQL esterno
59+
configuration:
60+
kestra:
61+
server:
62+
base-url: "https://kestra.local.ildoc.it"
63+
64+
# Repository (metadati workflow, executions, etc.)
65+
repository:
66+
type: postgres
67+
68+
# Queue (task scheduling)
69+
queue:
70+
type: postgres
71+
72+
# Storage per file, logs, outputs
73+
storage:
74+
type: local
75+
local:
76+
base-path: "/app/storage"
77+
78+
# Tasks configuration
79+
tasks:
80+
tmp-dir:
81+
path: "/tmp/kestra-wd/tmp"
82+
83+
# Secrets Kestra (database credentials)
84+
# Questi verranno sovrascritti da External Secrets
85+
secrets:
86+
kestra:
87+
datasources:
88+
postgres:
89+
# Placeholder - verranno sovrascritti da External Secrets
90+
url: jdbc:postgresql://192.168.0.30:5432/kestra_db
91+
username: kestra_user
92+
password: placeholder
93+
94+
# Service Account
95+
serviceAccount:
96+
create: true
97+
automountToken: false
98+
99+
# Service
100+
service:
101+
type: ClusterIP
102+
port: 8080
103+
104+
# Persistence per storage locale
105+
persistence:
106+
enabled: true
107+
storageClassName: "nfs-csi"
108+
accessModes:
109+
- ReadWriteOnce
110+
size: 20Gi # Storage per workflow files, logs, outputs
111+
112+
# Docker-in-Docker per eseguire container
113+
# Necessario per task come Script con Docker runner
114+
dind:
115+
enabled: true
116+
# Modalità rootless (più sicura)
117+
mode: 'rootless'
118+
119+
image:
120+
repository: docker
121+
tag: dind-rootless
122+
pullPolicy: IfNotPresent
123+
124+
securityContext:
125+
privileged: true
126+
runAsUser: 1000
127+
runAsGroup: 1000
128+
129+
args:
130+
- --log-level=fatal
131+
- --group=1000
132+
133+
resources:
134+
limits:
135+
cpu: 1000m
136+
memory: 2Gi
137+
requests:
138+
cpu: 100m
139+
memory: 512Mi
140+
141+
# Disabilita servizi non necessari
142+
# (PostgreSQL e MinIO sono esterni)
143+
kafka:
144+
enabled: false
145+
146+
elasticsearch:
147+
enabled: false
148+
149+
# Operator (solo Enterprise Edition)
150+
operator:
151+
enabled: false
152+
153+
# Ingress disabilitato (usiamo HTTPRoute)
154+
ingress:
155+
enabled: false

0 commit comments

Comments
 (0)