Gerador YAML de Kubernetes StatefulSet e Headless Service
Gere manifestos de Kubernetes StatefulSet prontos para produção com Headless Service complementar, volumeClaimTemplates persistentes, réplicas e 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: 50GiPartição: 0 | Estratégia: RollingUpdate
Retenção: Retain | fsGroup:: 999
Sondas: 3/3 ativas
Geração de manifestos 100% no navegador
Zero envio para servidores externos ou rastreamento. Todos os manifestos de StatefulSet, serviços headless e modelos de PVC são gerados diretamente na memória do navegador.
Ciclo de vida ordenado e identidade DNS estável
Garante identidades ordinais exclusivas, resolução DNS estável com Headless Service, controle de ciclo de vida OrderedReady e modelos de volume persistente.
Segurança padrão CIS e exportação multiformato
Impõe contextos de segurança não-root, eliminação de privilégios e gera saídas prontas para produção em Helm, Kustomize e comandos da CLI kubectl.