Core-infra sizing and scaling
This documents the target portable K3s profiles. It does not describe the current AKS core-infra shape.
Scope
First target: core-services-single, one private K3s server VM for Forgejo, Harbor, OpenBao, Envoy Gateway, Cilium, cert-manager, Tailscale, backup tooling, and a small number of core operators. This is intended to be a stable core-services cluster that can run for months with only routine dependency updates. No platform app workloads.
Compute requirements
Vendor docs use GB. The resulting VM sizes below use GiB as the infrastructure target unit.
| Service | Published CPU minimum | Published memory minimum | Reference | Notes |
|---|---|---|---|---|
| K3s server | 2 cores | 2 GB | K3s requirements | Baseline only. Workloads are excluded. K3s server sizing also lists 2 CPU / 4 GB for 0-350 agents. |
| K3s server with simple workload | 6% of 1 core in test | 1596 MB with SQLite/Kine | K3s resource profiling | Test included K3s packaged components, monitoring, and example app. It excludes our workloads, image management overhead, logging, and management agents. |
| Harbor | 2 CPU | 4 GB | Harbor prerequisites | Harbor recommended is 4 CPU / 8 GB. This is the largest published numeric requirement in this stack. |
| Forgejo | Not published | Not published | Forgejo recommendations, Forgejo Docker install | Official docs give database and data-volume guidance, not fixed CPU/RAM minimums. PostgreSQL or MySQL is recommended for high activity. |
| OpenBao | Not published | Not published | OpenBao storage, OpenBao Raft, OpenBao Helm modes | Official docs give storage-mode guidance, not fixed CPU/RAM minimums. For Raft, avoid burstable CPU/storage and use SSD-backed storage. |
Math:
| Basis | CPU | Memory | Interpretation |
|---|---|---|---|
| Published hard minimum subtotal, K3s server + Harbor minimum | 4 CPU | 6 GB | Leaves Forgejo, OpenBao, controllers, logs, and image pulls unbudgeted. |
| Published recommended subtotal, K3s 0-350 agent sizing + Harbor recommended | 6 CPU | 12 GB | Still excludes Forgejo/OpenBao/controllers. Round up for operational headroom. |
Storage requirements
| Service or volume | Published minimum | Published recommended | Reference | Core core-services-single target |
|---|---|---|---|---|
| K3s datastore/root disk | Not published | SSD recommended | K3s requirements, K3s resource profiling | 80-100 GiB root disk |
| Harbor | 40 GB | 160 GB | Harbor prerequisites | 160 GiB registry PV |
| Forgejo | Not published | Not published | Forgejo Docker install | 50 GiB minimum, 100 GiB preferred |
| OpenBao data and audit | Not published | SSD, non-burstable storage for Raft | OpenBao storage, OpenBao Raft | 30 GiB minimum, 50 GiB preferred |
Resulting VM sizes
| Profile | VM size | Storage | Use |
|---|---|---|---|
| Minimum first core VM | 4 vCPU / 8 GiB RAM | 100 GiB root, 160 GiB Harbor, 100 GiB Forgejo, 30-50 GiB OpenBao | Use only if runners and Harbor scanning are off-node or rare. Leaves less operational headroom. |
| Recommended first core VM | 8 vCPU / 16 GiB RAM | 100 GiB root, 160 GiB Harbor, 100 GiB Forgejo, 30-50 GiB OpenBao | Default for a stable setup that should run for months with minimal resizing. |
core-services-ha starter |
3 servers, 2-4 vCPU / 4-8 GiB RAM each | SSD-backed state and explicit workload PVs | Only if workloads run mostly on separate agents. |
core-services-ha with workloads on servers |
3 servers, 4-8 vCPU / 8-16 GiB RAM each | SSD-backed state and explicit workload PVs | Use when core workloads can run on server nodes. |
Scale-up triggers
- Move runners off the server VM when builds compete with Harbor, Forgejo, or K3s.
- Move Harbor blobs to object storage before local registry backup/restore becomes slow.
- Leave
core-services-singlewhen OpenBao becomes a production runtime dependency. - Promote to HA when core service RTO/RPO cannot tolerate single-VM restore time.