Comments that pointed at other YAML as `file.yaml:N` went stale on any edit above the cited line; three drift fixes had been merged by hand (REN-181). The cited block now carries `# anchor: <name>` and the comment cites `path.yaml#<name>`. - Sweep: all 32 line-number citations in YAML comments converted. Several were already stale at head and now point at the right block (see PR). Vendored files (Flux gotk-components, IMC CRD) get no anchor; those two citations name the object/schema path instead. - Guard: scripts/ci/yaml-citations.sh in ci-manifests-test.yml; fails on a line-number citation or a path#name whose file/anchor is gone. Self-test in ci-scripts-test.yml. - CONTRIBUTING.md: the convention in three lines. Comment-only under kubernetes/: every file parses to identical objects before and after, so Flux applies nothing and no ConfigMap data changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
85 lines
3.5 KiB
YAML
85 lines
3.5 KiB
YAML
apiVersion: postgresql.cnpg.io/v1
|
|
kind: Cluster
|
|
metadata:
|
|
# anchor: pprl-pg
|
|
name: pprl-pg
|
|
namespace: paperless
|
|
annotations:
|
|
# CRITICAL data-guard: prune-disabled so the seed-paperless -> paperless KS
|
|
# ownership handoff can never prune this Cluster (which would delete its data
|
|
# PVCs). Landed here first, via seed-paperless, so it's live before the move.
|
|
# Kept permanently as a standing guard.
|
|
kustomize.toolkit.fluxcd.io/prune: disabled
|
|
spec:
|
|
instances: 2
|
|
# See ak-pg cluster.yaml for rationale: smartShutdownTimeout bounds failover
|
|
# downtime (the -rw backendless window); stopDelay bounds the barman-plugin
|
|
# shutdown-wedge window (cloudnative-pg#9770) from ~30min to ~1min.
|
|
smartShutdownTimeout: 10
|
|
stopDelay: 60
|
|
imageName: ghcr.io/cloudnative-pg/postgresql:16
|
|
enableSuperuserAccess: true
|
|
storage:
|
|
storageClass: ceph-block
|
|
size: 20Gi
|
|
plugins:
|
|
- name: barman-cloud.cloudnative-pg.io
|
|
isWALArchiver: true
|
|
parameters:
|
|
barmanObjectName: pprl-pg-store
|
|
bootstrap:
|
|
initdb:
|
|
database: paperless
|
|
owner: paperless
|
|
postgresql:
|
|
parameters:
|
|
shared_buffers: "256MB"
|
|
max_connections: "200"
|
|
# Write-reduction tuning. These databases are largely idle, and the
|
|
# Postgres defaults favour throughput over storage that wears out.
|
|
#
|
|
# checkpoint_timeout is the lever. The 5min default pushes every dirty
|
|
# page to disk 288 times a day, so a small database whose same few pages
|
|
# are re-dirtied constantly (sessions, tokens, job state) gets rewritten
|
|
# over and over. Measured on ak-pg: 25.8M checkpoint buffers flushed
|
|
# (~206 GB) against a 1046 MB database -- the whole thing roughly twice a
|
|
# day. At 15min those pages coalesce and are written a third as often.
|
|
#
|
|
# max_wal_size must rise with it, or checkpoints trigger on size instead
|
|
# and the timeout change does nothing. It also bounds crash recovery to
|
|
# at most 2GB of WAL replay.
|
|
#
|
|
# NOT changed: synchronous_commit stays at the default `on`. It is off for
|
|
# ha-pg because a state recorder is telemetry; these hold credentials,
|
|
# documents and job state, where losing the last few hundred ms of commits
|
|
# on an unclean shutdown is not an acceptable trade.
|
|
checkpoint_timeout: "15min"
|
|
max_wal_size: "2GB"
|
|
# zstd, not "on": the boolean spelling resolves to pglz (2016-era, weaker
|
|
# and slower than the lz4/zstd this build also accepts). Compresses the
|
|
# full-page images that dominate WAL volume after each checkpoint.
|
|
wal_compression: "zstd"
|
|
# A WAL segment is a fixed 16 MiB file, and archive_timeout forces a switch
|
|
# on a timer -- the segment is then written and archived at its full size
|
|
# no matter how little real WAL it holds. CNPG defaults to 5min, i.e. up
|
|
# to 288 segments/day = 4.1 GB/day that is largely padding.
|
|
#
|
|
# Verified on gf-pg first (the staged rollout): 211 -> 41 MB/hour, an 81%
|
|
# cut, with archived segments falling from ~12/hour to ~1.5/hour in step.
|
|
#
|
|
# The cost is RPO: up to 30min of WAL is unrecoverable if both instances
|
|
# are lost. The documents themselves live on the media PVC, not in
|
|
# Postgres -- this database holds their metadata.
|
|
archive_timeout: "30min"
|
|
# See ak-pg cluster.yaml for the rationale on synchronous replication.
|
|
synchronous:
|
|
method: any
|
|
number: 1
|
|
dataDurability: preferred
|
|
resources:
|
|
requests:
|
|
cpu: 200m
|
|
memory: 512Mi
|
|
limits:
|
|
memory: 1Gi
|