Générateur de YAML StatefulSet et Headless Service Kubernetes
Générez des manifestes Kubernetes StatefulSet de qualité production avec Headless Service associé, volumeClaimTemplates persistants, réplicas et 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 | Stratégie: RollingUpdate
Rétention: Retain | fsGroup :: 999
Sondes: 3/3 actives
Génération de manifestes 100% côté client
Aucun transfert vers des serveurs externes. Tous les manifestes StatefulSet, services headless et modèles de PVC sont synthétisés directement dans la mémoire du navigateur.
Cycle de vie ordonné et identité DNS stable
Garantit des identités ordinales uniques, un adressage DNS prévisible via Headless Service, un séquençage OrderedReady et des modèles de volume persistant.
Durcissement de sécurité CIS et exports multiples
Applique des contextes de sécurité non-root, supprime les fonctionnalités Linux et produit des sorties prêtes pour la production pour Helm, Kustomize et kubectl.