Add K8s app deployment, Dockerfile, and CI workflow (Option A)

This commit is contained in:
Story Crater Bot
2026-08-23 00:01:30 -07:00
parent 9ca988aeb3
commit eaed7fc42a
8 changed files with 272 additions and 1 deletions
+95
View File
@@ -0,0 +1,95 @@
# Poimen Memory API Server
# Serves 7 HTTP endpoints for memory ingest, query, and management.
# Connects to memory-db (pgvector) for persistent storage.
apiVersion: apps/v1
kind: Deployment
metadata:
name: poimen-memory
namespace: poimen
labels:
app.kubernetes.io/name: poimen-memory
app.kubernetes.io/component: api-server
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: poimen-memory
template:
metadata:
labels:
app.kubernetes.io/name: poimen-memory
spec:
containers:
- name: memory
image: forgejo.riotpiao.com/rock/poimen-memory:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
name: http
env:
# Database connection (from CNPG auto-generated secret)
- name: DATABASE_HOST
value: "memory-db-rw.poimen.svc.cluster.local"
- name: DATABASE_PORT
value: "5432"
- name: DATABASE_NAME
value: "memory"
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: memory-db-app
key: username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: memory-db-app
key: password
- name: DATABASE_URL
value: "postgresql://$(DATABASE_USER):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable"
# LLM Gateway API key
- name: MEM_API_KEY
valueFrom:
secretKeyRef:
name: poimen-memory-secrets
key: llm-api-key
# Server config
- name: MEM_PORT
value: "8080"
- name: MEM_HOME
value: "/data"
args:
- serve
- --port
- "8080"
- --api-key
- "$(MEM_API_KEY)"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
# Tolerate control-plane nodes
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule