e8d46d08f2
Stand up the forge on k8s to replace the Puppet VM. Deployed HA-shaped to match what the VM already runs (multi-replica on shared storage + external DB/cache): official Gitea chart 12.6.0 (app 1.26.2) at 2 replicas on RWX CephFS, CNPG Postgres with S3 backup, standalone Valkey for cache/session/queue, Authentik OIDC, Actions disabled and the container registry moved to artifactapi. Serves a temporary git2.k8s.syd1.au.unkin.net host; cutover is staged (see the doc). - add apps/base/gitea (namespace, CNPG cluster+backup+pooler, Valkey, VaultAuth, VaultStaticSecrets, Gateway, HTTPRoute) - add apps/overlays/au-syd1/gitea (chart 12.6.0 via helm-through-kustomize + values, drop the chart test Pod) - register gitea in the platform ApplicationSet and AppProject - add docs/gitea-migration.md staged cutover plan Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
37 lines
972 B
YAML
37 lines
972 B
YAML
---
|
|
# pgbouncer in front of the primary. Gitea opens a connection per request and
|
|
# benefits from pooling under multiple app replicas. Session mode keeps Gitea's
|
|
# occasional session-scoped state (advisory locks, LISTEN/NOTIFY) working.
|
|
apiVersion: postgresql.cnpg.io/v1
|
|
kind: Pooler
|
|
metadata:
|
|
name: gitea-postgres-pooler-rw
|
|
namespace: gitea
|
|
spec:
|
|
cluster:
|
|
name: gitea-postgres
|
|
instances: 2
|
|
pgbouncer:
|
|
parameters:
|
|
default_pool_size: "50"
|
|
max_client_conn: "200"
|
|
paused: false
|
|
poolMode: session
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: pooler-rw
|
|
spec:
|
|
affinity:
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchExpressions:
|
|
- key: app
|
|
operator: In
|
|
values:
|
|
- pooler-rw
|
|
topologyKey: kubernetes.io/hostname
|
|
containers: []
|
|
type: rw
|