Files
poimen-workflows/k8s/temporal/04-temporal-ui-deployment.yaml
T
poimen 4f51c419a2 feat(phase-1.1): deploy temporal server in k8s
Temporal infrastructure deployment with:
  - PostgreSQL StatefulSet (event log + visibility)
    - 10Gi PVC, health checks, port 5432
  - Elasticsearch StatefulSet (workflow search)
    - 20Gi PVC, health checks, port 9200
  - Temporal Server StatefulSet (main service)
    - Frontend: 7233, Matching: 7235, History: 7234, Worker: 7239
    - Headless + ClusterIP services
    - Auto-setup image: temporalio/auto-setup:1.20.0
  - Temporal UI Deployment (web visualization)
    - Port 3000, connects to frontend:7233
    - LoadBalancer service for access

Components:
  - 00-namespace.yaml: dedicated temporal namespace
  - 01-postgres-statefulset.yaml: event log backend
  - 02-elasticsearch-statefulset.yaml: search visibility
  - 03-temporal-server-statefulset.yaml: server + services
  - 04-temporal-ui-deployment.yaml: web ui
  - kustomization.yaml: deployment automation
  - README.md: deployment + troubleshooting guide

Health checks: liveness + readiness on all components
Persistence: PVCs with dynamic provisioning
Ports: 5432 (postgres), 9200 (es), 7233-7239 (temporal)

Deploy: kubectl apply -k k8s/temporal/

Effort: 150 LOC (complete K8s manifests)
2026-09-08 16:59:15 -07:00

86 lines
1.6 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: temporal-ui
namespace: temporal
labels:
app: temporal-ui
spec:
replicas: 1
selector:
matchLabels:
app: temporal-ui
template:
metadata:
labels:
app: temporal-ui
spec:
containers:
- name: ui
image: temporalio/ui:2.10.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
env:
- name: TEMPORAL_ADDRESS
value: "temporal-frontend.temporal.svc.cluster.local:7233"
- name: TEMPORAL_CORS_ORIGINS
value: "http://localhost:3000"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: temporal-ui
namespace: temporal
labels:
app: temporal-ui
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 8080
protocol: TCP
name: http
selector:
app: temporal-ui
---
apiVersion: v1
kind: Service
metadata:
name: temporal-ui-external
namespace: temporal
labels:
app: temporal-ui
spec:
type: LoadBalancer
ports:
- port: 3000
targetPort: 8080
protocol: TCP
name: http
selector:
app: temporal-ui