Files
schemas/k8s/deploy.yaml
T
argoyle 921d4e39fa
schemas / vulnerabilities (pull_request) Successful in 2m10s
schemas / check (pull_request) Successful in 2m59s
schemas / check-release (pull_request) Successful in 3m35s
pre-commit / pre-commit (pull_request) Successful in 6m43s
schemas / build (pull_request) Successful in 17m35s
schemas / deploy-prod (pull_request) Has been skipped
fix: raise Node heap cap to 512MB and bump pod memory limit
The Dockerfile's NODE_OPTIONS=--max-old-space-size=64 was added to keep
idle Node memory low, but in practice it OOMs wgc router compose as soon
as the supergraph has more than a handful of subgraphs:

  FATAL ERROR: Ineffective mark-compacts near heap limit
  Allocation failed - JavaScript heap out of memory

Bake the higher cap into the image and raise the container memory limit
(k8s/deploy.yaml) so the cgroup doesn't kill the pod at the new ceiling.
Memory request stays modest so the pod still schedules tightly when idle.

The live k8s.unbound.se cluster was already patched in place (kubectl
set env + set resources). This commit makes the manifest match.
2026-05-19 06:56:12 +02:00

95 lines
2.2 KiB
YAML

apiVersion: v1
kind: ServiceAccount
metadata:
name: schemas
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: schemas
name: schemas
annotations:
kubernetes.io/change-cause: "${TIMESTAMP} Deployed commit id: ${COMMIT}"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: schemas
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app.kubernetes.io/name: schemas
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: "app.kubernetes.io/name"
operator: In
values:
- schemas
topologyKey: kubernetes.io/hostname
containers:
- name: schemas
resources:
requests:
cpu: "20m"
memory: "128Mi"
limits:
memory: "768Mi"
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
imagePullPolicy: IfNotPresent
image: oci.unbound.se/unboundsoftware/schemas:${COMMIT}
ports:
- name: api
containerPort: 8080
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://k8s-monitoring-alloy-receiver.monitoring.svc.cluster.local:4318
envFrom:
- configMapRef:
name: schemas
- secretRef:
name: schemas
restartPolicy: Always
serviceAccountName: schemas
---
apiVersion: v1
kind: Service
metadata:
name: schemas
spec:
ports:
- port: 80
name: api
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: schemas
type: NodePort