Files
manifests/values/temporal/values/temporal.yaml
T
2026-07-08 22:57:31 +02:00

173 lines
4.7 KiB
YAML

server:
replicaCount: 2
config:
logLevel: "info"
persistence:
defaultStore: default
visibilityStore: visibility
# immutable after first deploy
numHistoryShards: 512
datastores:
default:
sql:
createDatabase: false
manageSchema: true
pluginName: postgres12
driverName: postgres12
databaseName: temporal
connectAddr: "temporal-db-rw.temporal:5432"
connectProtocol: tcp
user: temporal
existingSecret: temporal-db-app
secretKey: password
maxConns: 20
maxIdleConns: 20
maxConnLifetime: "1h"
# NOTE: Postgres 12+ gives advanced visibility; no Elasticsearch needed.
visibility:
sql:
createDatabase: false
manageSchema: true
pluginName: postgres12
driverName: postgres12
databaseName: temporal_visibility
connectAddr: "temporal-db-rw.temporal:5432"
connectProtocol: tcp
user: temporal
existingSecret: temporal-db-app
secretKey: password
maxConns: 10
maxIdleConns: 10
maxConnLifetime: "1h"
metrics:
prometheus:
timerType: histogram
listenAddress: "0.0.0.0:9090"
metrics:
serviceMonitor:
enabled: true
interval: 30s
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi
frontend:
podDisruptionBudget:
maxUnavailable: 1
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/instance: temporal
app.kubernetes.io/component: frontend
history:
resources:
requests:
cpu: 250m
memory: 768Mi
limits:
cpu: "1"
memory: 1536Mi
podDisruptionBudget:
maxUnavailable: 1
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/instance: temporal
app.kubernetes.io/component: history
matching:
podDisruptionBudget:
maxUnavailable: 1
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/instance: temporal
app.kubernetes.io/component: matching
worker:
podDisruptionBudget:
maxUnavailable: 1
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/instance: temporal
app.kubernetes.io/component: worker
# no persistent debug pod; use temporalio/admin-tools on demand
admintools:
enabled: false
web:
enabled: true
replicaCount: 2
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
podDisruptionBudget:
maxUnavailable: 1
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: temporal
app.kubernetes.io/instance: temporal
app.kubernetes.io/component: web
# NOTE: native OIDC SSO via Entra ID (same oceanbox-oidc secret as Grafana); gates UI login only
additionalEnv:
- name: TEMPORAL_AUTH_ENABLED
value: "true"
- name: TEMPORAL_AUTH_TYPE
value: "oidc"
- name: TEMPORAL_AUTH_PROVIDER_URL
value: "https://login.microsoftonline.com/3f737008-e9a0-4485-9d27-40329d288089/v2.0"
- name: TEMPORAL_AUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: oceanbox-oidc
key: client_id
- name: TEMPORAL_AUTH_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: oceanbox-oidc
key: client_secret
- name: TEMPORAL_AUTH_CALLBACK_URL
value: "https://temporal.ekman.oceanbox.io/auth/sso/callback"
- name: TEMPORAL_AUTH_SCOPES
value: "openid,profile,email,offline_access"
schema:
useHelmHooks: false
# NOTE: run as an ArgoCD sync hook so the controller-mutated Job isn't diffed and stays OutOfSync forever
jobAnnotations:
argocd.argoproj.io/hook: Sync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation