desligar postgres antigo (etapa 2): remove o CronJob pg-backup de demo, piloto e acme
O banco antigo desses tres esta sem conexao e os dados reais estao no pg-compartilhado (backup pg-backup-compartilhado). Arquivo final de cada um enviado e conferido em 05/10 (arquivo-final-20261005). A escolinha NAO entra: o postgres dela e o banco de verdade. prune:false -> o CronJob sai tambem a mao.
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
# Backup diario do Postgres do tenant demo (pg_dump -> PVC, retencao 7 dias)
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: pg-backups
|
||||
namespace: acme-prod
|
||||
spec:
|
||||
accessModes: [ReadWriteOnce]
|
||||
storageClassName: local-path
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
---
|
||||
# ConfigMap com o DESTINATARIO age (chave PUBLICA).
|
||||
#
|
||||
# Publica pode ser versionada: ela so cifra. Quem tem a publica NAO abre o
|
||||
# backup. A privada e gerada por scripts/backup/gerar_chave_backup.sh na maquina
|
||||
# de quem restaura, e NUNCA chega neste repositorio nem no VPS.
|
||||
#
|
||||
# O valor abaixo e um marcador: substitua pelo destinatario real antes de
|
||||
# aplicar. Com o marcador, o backup_tenant.sh recusa rodar em vez de gravar em
|
||||
# claro — e o comportamento certo.
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: pg-backup-chave
|
||||
namespace: acme-prod
|
||||
data:
|
||||
# A MESMA publica do `plataforma` (2026-09-21): uma chave privada
|
||||
# restaura tudo, e ela vive fora do servidor. Chave por tenant seria
|
||||
# decisao do dono, e multiplicaria o que ele precisa guardar.
|
||||
destinatario: "age1g37gc3gvq0zn7802pqh5dd0m3pkvc4z3g2hqk5w3dgvnaz3hwsrq7ps04y"
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: pg-backup
|
||||
namespace: acme-prod
|
||||
spec:
|
||||
schedule: "0 2 * * *" # diariamente 02:00
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
# O label e o que a 19-netpol-backup-offsite seleciona: so o pod do backup
|
||||
# sai para a internet (443), para mandar o dump cifrado ao bucket.
|
||||
metadata:
|
||||
labels: { app: pg-backup }
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
# Imagem propria: postgres:16 + age. O dump precisa ser cifrado
|
||||
# ANTES de sair do processo, entao as duas ferramentas tem de estar
|
||||
# no mesmo container. Construida de scripts/backup/Containerfile.
|
||||
- name: pg-backup
|
||||
image: docker.io/library/atm-pg-backup:1.3
|
||||
env:
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef: { name: db-credentials, key: password }
|
||||
- name: CHAVE_PUBLICA
|
||||
valueFrom:
|
||||
configMapKeyRef: { name: pg-backup-chave, key: destinatario }
|
||||
- { name: PGHOST, value: "postgres" }
|
||||
- { name: PGUSER, value: "atm" }
|
||||
- { name: DATABASES, value: "athleticmap keycloak" }
|
||||
- { name: DESTINO, value: "/backups" }
|
||||
- { name: RETENCAO_DIAS, value: "7" }
|
||||
# O envio para fora. O script se cala quando o Secret nao existe, e
|
||||
# falha ALTO quando existe e nao funciona — sao coisas diferentes,
|
||||
# e um CronJob que falha toda madrugada por falta de credencial
|
||||
# ensina todo mundo a ignorar o unico alerta que nao se pode ignorar.
|
||||
- { name: COMANDO_ENVIO, value: "enviar_offsite.sh {}" }
|
||||
# Um prefixo POR ORIGEM no bucket: sem ele todos gravavam em `athleticmap/` com o
|
||||
# mesmo nome de arquivo — nao se sabia de quem era o dump, e dois no mesmo segundo
|
||||
# se sobrescreveriam (visto em 01/10/2026).
|
||||
- { name: OFFSITE_PREFIXO, value: "athleticmap/acme" }
|
||||
# `optional: true`: enquanto o Secret `backup-offsite` nao existir, o
|
||||
# CronJob roda igual e guarda local. No dia em que ele existir, o
|
||||
# envio liga sozinho — sem tocar neste arquivo.
|
||||
envFrom:
|
||||
- secretRef: { name: backup-offsite, optional: true }
|
||||
command: ["backup_tenant.sh"]
|
||||
volumeMounts:
|
||||
- { name: backups, mountPath: /backups }
|
||||
volumes:
|
||||
- name: backups
|
||||
persistentVolumeClaim:
|
||||
claimName: pg-backups
|
||||
@@ -1,87 +0,0 @@
|
||||
# Backup diario do Postgres do tenant demo (pg_dump -> PVC, retencao 7 dias)
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: pg-backups
|
||||
namespace: demo-prod
|
||||
spec:
|
||||
accessModes: [ReadWriteOnce]
|
||||
storageClassName: local-path
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
---
|
||||
# ConfigMap com o DESTINATARIO age (chave PUBLICA).
|
||||
#
|
||||
# Publica pode ser versionada: ela so cifra. Quem tem a publica NAO abre o
|
||||
# backup. A privada e gerada por scripts/backup/gerar_chave_backup.sh na maquina
|
||||
# de quem restaura, e NUNCA chega neste repositorio nem no VPS.
|
||||
#
|
||||
# O valor abaixo e um marcador: substitua pelo destinatario real antes de
|
||||
# aplicar. Com o marcador, o backup_tenant.sh recusa rodar em vez de gravar em
|
||||
# claro — e o comportamento certo.
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: pg-backup-chave
|
||||
namespace: demo-prod
|
||||
data:
|
||||
# A MESMA publica do `plataforma` (2026-09-21): uma chave privada
|
||||
# restaura tudo, e ela vive fora do servidor. Chave por tenant seria
|
||||
# decisao do dono, e multiplicaria o que ele precisa guardar.
|
||||
destinatario: "age1g37gc3gvq0zn7802pqh5dd0m3pkvc4z3g2hqk5w3dgvnaz3hwsrq7ps04y"
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: pg-backup
|
||||
namespace: demo-prod
|
||||
spec:
|
||||
schedule: "0 2 * * *" # diariamente 02:00
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
# Imagem propria: postgres:16 + age. O dump precisa ser cifrado
|
||||
# ANTES de sair do processo, entao as duas ferramentas tem de estar
|
||||
# no mesmo container. Construida de scripts/backup/Containerfile.
|
||||
- name: pg-backup
|
||||
image: docker.io/library/atm-pg-backup:1.3
|
||||
env:
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef: { name: db-credentials, key: password }
|
||||
- name: CHAVE_PUBLICA
|
||||
valueFrom:
|
||||
configMapKeyRef: { name: pg-backup-chave, key: destinatario }
|
||||
- { name: PGHOST, value: "postgres" }
|
||||
- { name: PGUSER, value: "atm" }
|
||||
- { name: DATABASES, value: "athleticmap keycloak" }
|
||||
- { name: DESTINO, value: "/backups" }
|
||||
- { name: RETENCAO_DIAS, value: "7" }
|
||||
# O envio para fora. O script se cala quando o Secret nao existe, e
|
||||
# falha ALTO quando existe e nao funciona — sao coisas diferentes,
|
||||
# e um CronJob que falha toda madrugada por falta de credencial
|
||||
# ensina todo mundo a ignorar o unico alerta que nao se pode ignorar.
|
||||
- { name: COMANDO_ENVIO, value: "enviar_offsite.sh {}" }
|
||||
# Um prefixo POR ORIGEM no bucket: sem ele todos gravavam em `athleticmap/` com o
|
||||
# mesmo nome de arquivo — nao se sabia de quem era o dump, e dois no mesmo segundo
|
||||
# se sobrescreveriam (visto em 01/10/2026).
|
||||
- { name: OFFSITE_PREFIXO, value: "athleticmap/demo" }
|
||||
# `optional: true`: enquanto o Secret `backup-offsite` nao existir, o
|
||||
# CronJob roda igual e guarda local. No dia em que ele existir, o
|
||||
# envio liga sozinho — sem tocar neste arquivo.
|
||||
envFrom:
|
||||
- secretRef: { name: backup-offsite, optional: true }
|
||||
command: ["backup_tenant.sh"]
|
||||
volumeMounts:
|
||||
- { name: backups, mountPath: /backups }
|
||||
volumes:
|
||||
- name: backups
|
||||
persistentVolumeClaim:
|
||||
claimName: pg-backups
|
||||
@@ -1,91 +0,0 @@
|
||||
# Backup diario do Postgres do tenant piloto (pg_dump -> PVC, retencao 7 dias)
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: pg-backups
|
||||
namespace: piloto-prod
|
||||
spec:
|
||||
accessModes: [ReadWriteOnce]
|
||||
storageClassName: local-path
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
---
|
||||
# ConfigMap com o DESTINATARIO age (chave PUBLICA).
|
||||
#
|
||||
# Publica pode ser versionada: ela so cifra. Quem tem a publica NAO abre o
|
||||
# backup. A privada e gerada por scripts/backup/gerar_chave_backup.sh na maquina
|
||||
# de quem restaura, e NUNCA chega neste repositorio nem no VPS.
|
||||
#
|
||||
# O valor abaixo e um marcador: substitua pelo destinatario real antes de
|
||||
# aplicar. Com o marcador, o backup_tenant.sh recusa rodar em vez de gravar em
|
||||
# claro — e o comportamento certo.
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: pg-backup-chave
|
||||
namespace: piloto-prod
|
||||
data:
|
||||
# A MESMA publica do `plataforma` (2026-09-21): uma chave privada
|
||||
# restaura tudo, e ela vive fora do servidor. Chave por tenant seria
|
||||
# decisao do dono, e multiplicaria o que ele precisa guardar.
|
||||
destinatario: "age1g37gc3gvq0zn7802pqh5dd0m3pkvc4z3g2hqk5w3dgvnaz3hwsrq7ps04y"
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: pg-backup
|
||||
namespace: piloto-prod
|
||||
spec:
|
||||
schedule: "0 2 * * *" # diariamente 02:00
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
# O label e o que a 19-netpol-backup-offsite seleciona: so o pod do backup
|
||||
# sai para a internet (443), para mandar o dump cifrado ao bucket.
|
||||
metadata:
|
||||
labels: { app: pg-backup }
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
# Imagem propria: postgres:16 + age. O dump precisa ser cifrado
|
||||
# ANTES de sair do processo, entao as duas ferramentas tem de estar
|
||||
# no mesmo container. Construida de scripts/backup/Containerfile.
|
||||
- name: pg-backup
|
||||
image: docker.io/library/atm-pg-backup:1.3
|
||||
env:
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef: { name: db-credentials, key: password }
|
||||
- name: CHAVE_PUBLICA
|
||||
valueFrom:
|
||||
configMapKeyRef: { name: pg-backup-chave, key: destinatario }
|
||||
- { name: PGHOST, value: "postgres" }
|
||||
- { name: PGUSER, value: "atm" }
|
||||
- { name: DATABASES, value: "athleticmap keycloak" }
|
||||
- { name: DESTINO, value: "/backups" }
|
||||
- { name: RETENCAO_DIAS, value: "7" }
|
||||
# O envio para fora. O script se cala quando o Secret nao existe, e
|
||||
# falha ALTO quando existe e nao funciona — sao coisas diferentes,
|
||||
# e um CronJob que falha toda madrugada por falta de credencial
|
||||
# ensina todo mundo a ignorar o unico alerta que nao se pode ignorar.
|
||||
- { name: COMANDO_ENVIO, value: "enviar_offsite.sh {}" }
|
||||
# Um prefixo POR ORIGEM no bucket: sem ele todos gravavam em `athleticmap/` com o
|
||||
# mesmo nome de arquivo — nao se sabia de quem era o dump, e dois no mesmo segundo
|
||||
# se sobrescreveriam (visto em 01/10/2026).
|
||||
- { name: OFFSITE_PREFIXO, value: "athleticmap/piloto" }
|
||||
# `optional: true`: enquanto o Secret `backup-offsite` nao existir, o
|
||||
# CronJob roda igual e guarda local. No dia em que ele existir, o
|
||||
# envio liga sozinho — sem tocar neste arquivo.
|
||||
envFrom:
|
||||
- secretRef: { name: backup-offsite, optional: true }
|
||||
command: ["backup_tenant.sh"]
|
||||
volumeMounts:
|
||||
- { name: backups, mountPath: /backups }
|
||||
volumes:
|
||||
- name: backups
|
||||
persistentVolumeClaim:
|
||||
claimName: pg-backups
|
||||
Reference in New Issue
Block a user