Kubernetes Deployment
What you'll accomplish: Deploy Hoziron to Kubernetes using the official Helm chart with production settings including PDB, HPA, resource limits, and network policies.
Overview
Install with Helm
helm install hoziron ./charts/hoziron \
-f ./charts/hoziron/values-prod.yaml \
--set secrets.anthropicApiKey=$ANTHROPIC_API_KEY
Production values
The values-prod.yaml file configures:
- Multiple replicas for availability
- Resource requests and limits
- PodDisruptionBudget (PDB) — prevents all pods from being evicted simultaneously
- HorizontalPodAutoscaler (HPA) — scales based on CPU/memory pressure
Pod Disruption Budget
Ensures at least one pod remains available during voluntary disruptions:
pdb:
enabled: true
minAvailable: 1
Horizontal Pod Autoscaler
hpa:
enabled: true
minReplicas: 2
maxReplicas: 5
targetCPUUtilizationPercentage: 70
Network policies
Restrict egress to only LLM provider endpoints:
networkPolicy:
enabled: true
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- port: 443
protocol: TCP
Security context
securityContext:
runAsNonRoot: true
runAsUser: 65532
fsGroup: 65532
readOnlyRootFilesystem: true
TLS
Disable native TLS — the ingress controller handles it:
[server]
listen = "0.0.0.0:4200"
[server.tls]
enabled = false
Graceful shutdown
Set terminationGracePeriodSeconds to at least 30s:
terminationGracePeriodSeconds: 30
The daemon catches SIGTERM and flushes memory stores before exiting.
Verify
kubectl get pods -l app.kubernetes.io/name=hoziron
kubectl port-forward svc/hoziron 4200:4200
curl http://localhost:4200/health
Next steps
Related: