fix(cota): a cota cabia o repouso, mas nao a troca -- faltava por 128Mi

Os dois tenants pagos estavam presos em `1.1-demo` desde 24/09 23:43,
sem conseguir ir para `1.2-auditoria`. O ArgoCD dizia Synced: o
Deployment batia com o git. O que nao acontecia era o rollout.

Em repouso os cinco Deployments somam 2944Mi. O maxSurge de 25% sobre
uma replica arredonda para cima e pede um pod inteiro a mais: 768Mi,
quando o que troca e um runtime. 2944 + 768 = 3712, contra 3584.

O cabecalho do arquivo ja tinha essa licao escrita -- para `pods`, que
derrubou o provisionamento do plataforma em 17/09. A memoria nao ganhou
o mesmo tratamento. Agora a regra esta escrita uma vez, para todos os
tetos, e o paragrafo velho que ainda dizia `pods: 8` saiu.

So limits.memory travava: medido hoje, requests.memory tinha 560Mi
livres (a troca pede 400), requests.cpu 1100m (pede 100), limits.cpu
1300m (pede 1000) e pods 5 de 10.
This commit is contained in:
deploy
2026-09-25 11:52:56 +00:00
parent 50112c69e4
commit f7d12591fe
3 changed files with 93 additions and 24 deletions
@@ -24,14 +24,21 @@
# ----------------------------
# soma 1.177 MiB
#
# `requests.memory: 1.5Gi` cobre a soma com ~300 MiB de folga.
# `limits.memory: 2.5Gi` da a cada runtime espaco para picos sem que a soma dos
# limites vire uma promessa que o no nao pode cumprir.
# OS NUMEROS DA TABELA ACIMA SAO DE QUANDO ERAM QUATRO DEPLOYMENTS. Hoje sao
# cinco (o `servico-bff` entrou em 2026-09-24), e os tetos ja viveram duas
# correcoes: requests.memory 1.5Gi -> 2Gi, limits.memory 2.5Gi -> 3.5Gi ->
# 4352Mi, pods 8 -> 10. A razao de cada valor esta ao lado dele, la embaixo.
#
# A REGRA QUE VALE PARA TODOS: a cota tem de caber o REPOUSO MAIS UMA TROCA.
# Um Deployment sobe o pod novo ANTES de derrubar o velho, entao no pico existe
# um pod a mais do que o desenho sugere -- e o `maxSurge: 25%` sobre uma unica
# replica arredonda para cima, ou seja, sempre um inteiro.
#
# Ja custou duas vezes, pela mesma causa em dimensoes diferentes: derrubou o
# provisionamento do `plataforma` em 2026-09-17 (faltou `pods`), e prendeu os
# dois tenants pagos por 12h em 2026-09-24 (faltou `limits.memory`), com o
# ArgoCD dizendo "Synced" enquanto o pod novo era recusado pela cota.
#
# `pods: 8` — sao 4 Deployments; os outros 4 sao para o pod novo conviver com o
# velho durante um rollout, sem travar o deploy por cota. Foi exatamente isso que
# derrubou o provisionamento do `plataforma` em 2026-09-17: a cota do molde nao
# cabia e keycloak, bff e captacao nao conseguiam criar pod.
#
# NAO ha Postgres nem Keycloak aqui: os dois passam a viver em `plataforma-prod`
# (P4.7 e P4.8).
@@ -63,7 +70,23 @@ spec:
requests.cpu: "1.5"
requests.memory: 2Gi
limits.cpu: "5"
limits.memory: 3.5Gi
# SUBIU de 3.5Gi em 2026-09-25: faltava por 128Mi na hora da troca.
#
# A conta que o comentario acima comecou, agora terminada. Em repouso os
# cinco Deployments somam 2944Mi (128 + 768*3 + 512). O `maxSurge: 25%` sobre
# UMA replica arredonda para cima e pede um pod inteiro a mais: 768Mi, se o
# que esta trocando e um runtime. 2944 + 768 = 3712, contra um teto de 3584.
#
# Nao foi hipotese: os dois tenants pagos ficaram 12h presos em `1.1-demo`
# sem conseguir ir para `1.2-auditoria`, com o ArgoCD dizendo "Synced" e o
# pod novo recusado pela cota a cada ~17min.
#
# 4352Mi = 2944 de repouso + 768 da troca + 640 de sobra.
#
# So `limits.memory` travava. Medido em 2026-09-25: requests.memory tinha
# 560Mi livres (a troca pede 400), requests.cpu 1100m (pede 100), limits.cpu
# 1300m (pede 1000) e pods 5 de 10. Subir a memoria basta.
limits.memory: 4352Mi
pods: "10"
---
# =============================================================================
@@ -24,14 +24,21 @@
# ----------------------------
# soma 1.177 MiB
#
# `requests.memory: 1.5Gi` cobre a soma com ~300 MiB de folga.
# `limits.memory: 2.5Gi` da a cada runtime espaco para picos sem que a soma dos
# limites vire uma promessa que o no nao pode cumprir.
# OS NUMEROS DA TABELA ACIMA SAO DE QUANDO ERAM QUATRO DEPLOYMENTS. Hoje sao
# cinco (o `servico-bff` entrou em 2026-09-24), e os tetos ja viveram duas
# correcoes: requests.memory 1.5Gi -> 2Gi, limits.memory 2.5Gi -> 3.5Gi ->
# 4352Mi, pods 8 -> 10. A razao de cada valor esta ao lado dele, la embaixo.
#
# A REGRA QUE VALE PARA TODOS: a cota tem de caber o REPOUSO MAIS UMA TROCA.
# Um Deployment sobe o pod novo ANTES de derrubar o velho, entao no pico existe
# um pod a mais do que o desenho sugere -- e o `maxSurge: 25%` sobre uma unica
# replica arredonda para cima, ou seja, sempre um inteiro.
#
# Ja custou duas vezes, pela mesma causa em dimensoes diferentes: derrubou o
# provisionamento do `plataforma` em 2026-09-17 (faltou `pods`), e prendeu os
# dois tenants pagos por 12h em 2026-09-24 (faltou `limits.memory`), com o
# ArgoCD dizendo "Synced" enquanto o pod novo era recusado pela cota.
#
# `pods: 8` — sao 4 Deployments; os outros 4 sao para o pod novo conviver com o
# velho durante um rollout, sem travar o deploy por cota. Foi exatamente isso que
# derrubou o provisionamento do `plataforma` em 2026-09-17: a cota do molde nao
# cabia e keycloak, bff e captacao nao conseguiam criar pod.
#
# NAO ha Postgres nem Keycloak aqui: os dois passam a viver em `plataforma-prod`
# (P4.7 e P4.8).
@@ -63,7 +70,23 @@ spec:
requests.cpu: "1.5"
requests.memory: 2Gi
limits.cpu: "5"
limits.memory: 3.5Gi
# SUBIU de 3.5Gi em 2026-09-25: faltava por 128Mi na hora da troca.
#
# A conta que o comentario acima comecou, agora terminada. Em repouso os
# cinco Deployments somam 2944Mi (128 + 768*3 + 512). O `maxSurge: 25%` sobre
# UMA replica arredonda para cima e pede um pod inteiro a mais: 768Mi, se o
# que esta trocando e um runtime. 2944 + 768 = 3712, contra um teto de 3584.
#
# Nao foi hipotese: os dois tenants pagos ficaram 12h presos em `1.1-demo`
# sem conseguir ir para `1.2-auditoria`, com o ArgoCD dizendo "Synced" e o
# pod novo recusado pela cota a cada ~17min.
#
# 4352Mi = 2944 de repouso + 768 da troca + 640 de sobra.
#
# So `limits.memory` travava. Medido em 2026-09-25: requests.memory tinha
# 560Mi livres (a troca pede 400), requests.cpu 1100m (pede 100), limits.cpu
# 1300m (pede 1000) e pods 5 de 10. Subir a memoria basta.
limits.memory: 4352Mi
pods: "10"
---
# =============================================================================
@@ -24,14 +24,21 @@
# ----------------------------
# soma 1.177 MiB
#
# `requests.memory: 1.5Gi` cobre a soma com ~300 MiB de folga.
# `limits.memory: 2.5Gi` da a cada runtime espaco para picos sem que a soma dos
# limites vire uma promessa que o no nao pode cumprir.
# OS NUMEROS DA TABELA ACIMA SAO DE QUANDO ERAM QUATRO DEPLOYMENTS. Hoje sao
# cinco (o `servico-bff` entrou em 2026-09-24), e os tetos ja viveram duas
# correcoes: requests.memory 1.5Gi -> 2Gi, limits.memory 2.5Gi -> 3.5Gi ->
# 4352Mi, pods 8 -> 10. A razao de cada valor esta ao lado dele, la embaixo.
#
# A REGRA QUE VALE PARA TODOS: a cota tem de caber o REPOUSO MAIS UMA TROCA.
# Um Deployment sobe o pod novo ANTES de derrubar o velho, entao no pico existe
# um pod a mais do que o desenho sugere -- e o `maxSurge: 25%` sobre uma unica
# replica arredonda para cima, ou seja, sempre um inteiro.
#
# Ja custou duas vezes, pela mesma causa em dimensoes diferentes: derrubou o
# provisionamento do `plataforma` em 2026-09-17 (faltou `pods`), e prendeu os
# dois tenants pagos por 12h em 2026-09-24 (faltou `limits.memory`), com o
# ArgoCD dizendo "Synced" enquanto o pod novo era recusado pela cota.
#
# `pods: 8` — sao 4 Deployments; os outros 4 sao para o pod novo conviver com o
# velho durante um rollout, sem travar o deploy por cota. Foi exatamente isso que
# derrubou o provisionamento do `plataforma` em 2026-09-17: a cota do molde nao
# cabia e keycloak, bff e captacao nao conseguiam criar pod.
#
# NAO ha Postgres nem Keycloak aqui: os dois passam a viver em `plataforma-prod`
# (P4.7 e P4.8).
@@ -63,7 +70,23 @@ spec:
requests.cpu: "1.5"
requests.memory: 2Gi
limits.cpu: "5"
limits.memory: 3.5Gi
# SUBIU de 3.5Gi em 2026-09-25: faltava por 128Mi na hora da troca.
#
# A conta que o comentario acima comecou, agora terminada. Em repouso os
# cinco Deployments somam 2944Mi (128 + 768*3 + 512). O `maxSurge: 25%` sobre
# UMA replica arredonda para cima e pede um pod inteiro a mais: 768Mi, se o
# que esta trocando e um runtime. 2944 + 768 = 3712, contra um teto de 3584.
#
# Nao foi hipotese: os dois tenants pagos ficaram 12h presos em `1.1-demo`
# sem conseguir ir para `1.2-auditoria`, com o ArgoCD dizendo "Synced" e o
# pod novo recusado pela cota a cada ~17min.
#
# 4352Mi = 2944 de repouso + 768 da troca + 640 de sobra.
#
# So `limits.memory` travava. Medido em 2026-09-25: requests.memory tinha
# 560Mi livres (a troca pede 400), requests.cpu 1100m (pede 100), limits.cpu
# 1300m (pede 1000) e pods 5 de 10. Subir a memoria basta.
limits.memory: 4352Mi
pods: "10"
---
# =============================================================================