K8s Manifests
All in deploy/k8s/, synced by ArgoCD. One namespace, multiple services.
Resources
| File |
Kind |
Purpose |
namespace.yaml |
Namespace |
ai-accountant |
eventstore-deployment.yaml |
Deployment |
Event Store API (SHA updated by CI) |
eventstore-service.yaml |
Service |
ClusterIP 80→8080 |
accounting-deployment.yaml |
Deployment |
Accounting API (SHA updated by CI) |
accounting-service.yaml |
Service |
ClusterIP 80→8080 |
cost-deployment.yaml |
Deployment |
Cost API (SHA updated by CI) |
cost-service.yaml |
Service |
ClusterIP 80→8080 |
book-e-deployment.yaml |
Deployment |
Book-E agent (SHA updated by automate-e CI) |
book-e-configmap.yaml |
ConfigMap |
character.json mounted at /config/ |
book-e-secrets.yaml |
SealedSecret |
Discord token + Anthropic key |
eventstore-secrets.yaml |
SealedSecret |
Postgres credentials |
accounting-secrets.yaml |
SealedSecret |
Folio + Fiken tokens |
cost-secrets.yaml |
SealedSecret |
Anthropic/Google/Cloudflare usage keys |
postgres-statefulset.yaml |
StatefulSet |
PostgreSQL 16, 1 replica |
postgres-service.yaml |
Service |
ClusterIP 5432 |
cronjob.yaml |
CronJob |
Daily 07:00 compliance checks |
Resource Limits
| Pod |
CPU req |
Mem req |
CPU lim |
Mem lim |
| book-e |
50m |
64Mi |
500m |
256Mi |
| eventstore-api |
50m |
64Mi |
500m |
256Mi |
| accounting-api |
50m |
64Mi |
500m |
256Mi |
| cost-api |
50m |
64Mi |
500m |
256Mi |
| postgres |
100m |
256Mi |
500m |
512Mi |
All API services have low requests (50m/64Mi) because they're mostly idle on a single-node k3s cluster.
Images
| Service |
Image |
Tag source |
| Event Store API |
ghcr.io/stig-johnny/ai-accountant-eventstore |
CI on src/EventStoreApi/** |
| Accounting API |
ghcr.io/stig-johnny/ai-accountant-accounting |
CI on src/AccountingApi/** |
| Cost API |
ghcr.io/stig-johnny/ai-accountant-cost |
CI on src/CostApi/** |
| Book-E |
ghcr.io/stig-johnny/automate-e |
automate-e repo CI |