Kubernetes StatefulSet & Headless Service YAML Builder
Erstellen Sie produktionsreife Kubernetes StatefulSet-Manifeste mit Headless Service, persistenten volumeClaimTemplates, Replikaten und podManagementPolicy.
# ============================================================================
# Kubernetes StatefulSet: postgres-ha
# Generated via ToolsAA - 100% Client-Side Stateful Workload Builder
# Headless Network Domain: postgres-ha-headless.database.svc.cluster.local
# Pod Stable FQDN: postgres-ha-[0..2].postgres-ha-headless.database.svc.cluster.local
# ============================================================================
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres-ha
namespace: database
labels:
app: "postgres-ha"
tier: "database"
app.kubernetes.io/managed-by: toolsaa
annotations:
cluster.toolsaa.com/role: "primary-replica"
spec:
serviceName: "postgres-ha-headless"
replicas: 3
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
maxUnavailable: 1
revisionHistoryLimit: 10
minReadySeconds: 10
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain
whenScaled: Retain
selector:
matchLabels:
app: "postgres-ha"
template:
metadata:
labels:
app: "postgres-ha"
tier: "database"
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9187"
spec:
serviceAccountName: postgres-sa
terminationGracePeriodSeconds: 120
securityContext:
runAsNonRoot: true
runAsUser: 999
runAsGroup: 999
fsGroup: 999
fsGroupChangePolicy: "OnRootMismatch"
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: ["postgres-ha"]
topologyKey: "kubernetes.io/hostname"
nodeSelector:
node-role.kubernetes.io/database: "true"
containers:
- name: postgres
image: postgres:16-alpine
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
ports:
- name: postgresql
containerPort: 5432
protocol: TCP
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: POSTGRES_DB
value: "app_production"
- name: POSTGRES_USER
value: "postgres"
- name: PGDATA
value: "/var/lib/postgresql/data/pgdata"
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2000m"
memory: "4Gi"
volumeMounts:
- name: pgdata
mountPath: "/var/lib/postgresql/data"
livenessProbe:
exec:
command:
- "pg_isready"
- "-U"
- "postgres"
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
readinessProbe:
exec:
command:
- "pg_isready"
- "-U"
- "postgres"
- "-h"
- "127.0.0.1"
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 3
successThreshold: 1
failureThreshold: 3
startupProbe:
exec:
command:
- "pg_isready"
- "-U"
- "postgres"
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
successThreshold: 1
failureThreshold: 15
volumeClaimTemplates:
- metadata:
name: pgdata
labels:
app: "postgres-ha"
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "gp3"
resources:
requests:
storage: 50GiPartition: 0 | Strategie: RollingUpdate
Aufbewahrung: Retain | fsGroup:: 999
Probes: 3/3 aktiv
100% Lokale Client-Side Manifest-Generierung
Keine Serverübertragung oder Datenspeicherung. Sämtliche Kubernetes-StatefulSet-Manifeste, Headless-Services und PVC-Vorlagen werden direkt im Browser-Speicher kompiliert.
Geordneter Lifecycle & Headless-DNS-Identität
Gewährleistet eindeutige Ordinal-Identitäten, vorhersagbare DNS-Adressierung via Headless Service, OrderedReady-Lifecycle und persistente VolumeClaimTemplates.
CIS-Hardening & Multi-Format-Export
Erzwingt non-root SecurityContexts, verwirft Linux-Capabilities und liefert produktionsreife Ausgaben für Helm-Templates, Kustomize und kubectl CLI-Befehle.