diff --git a/tenants/escolinha-de-teste-2/00-namespace-quota-netpol.yaml b/tenants/escolinha-de-teste-2/00-namespace-quota-netpol.yaml index 308a68e..d07cb7c 100644 --- a/tenants/escolinha-de-teste-2/00-namespace-quota-netpol.yaml +++ b/tenants/escolinha-de-teste-2/00-namespace-quota-netpol.yaml @@ -51,11 +51,20 @@ metadata: namespace: escolinha-de-teste-2-prod spec: hard: - requests.cpu: "1" - requests.memory: 1.5Gi - limits.cpu: "4" - limits.memory: 2.5Gi - pods: "8" + # SUBIU em 2026-09-24 para caber o BFF, o quinto Deployment. + # + # Nao e folga generosa: com quatro Deployments o tenant ja usava 1232Mi dos + # 1536Mi, e o BFF pede 256Mi. Caberia no limite antigo em repouso, e + # estouraria no primeiro rollout — que e quando um Deployment sobe o pod + # novo antes de derrubar o velho. Foi essa conta que derrubou o + # provisionamento do `plataforma` em 17/09, e o registro dela esta ali. + # + # `pods` vai a 10 pelo mesmo motivo: cinco Deployments, um surge cada. + requests.cpu: "1.5" + requests.memory: 2Gi + limits.cpu: "5" + limits.memory: 3.5Gi + pods: "10" --- # ============================================================================= # A politica de rede. diff --git a/tenants/escolinha-de-teste-2/70-runtime-core.yaml b/tenants/escolinha-de-teste-2/70-runtime-core.yaml index 0917c20..58ddce8 100644 --- a/tenants/escolinha-de-teste-2/70-runtime-core.yaml +++ b/tenants/escolinha-de-teste-2/70-runtime-core.yaml @@ -21,7 +21,7 @@ spec: spec: containers: - name: runtime-core - image: docker.io/library/runtime-core:1.1-demo + image: docker.io/library/runtime-core:1.2-auditoria # `Never`: a imagem tem de estar no containerd do no ANTES do deploy. # "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome. imagePullPolicy: Never diff --git a/tenants/escolinha-de-teste-2/71-runtime-operacao.yaml b/tenants/escolinha-de-teste-2/71-runtime-operacao.yaml index f54c6bb..cf3ddae 100644 --- a/tenants/escolinha-de-teste-2/71-runtime-operacao.yaml +++ b/tenants/escolinha-de-teste-2/71-runtime-operacao.yaml @@ -21,7 +21,7 @@ spec: spec: containers: - name: runtime-operacao - image: docker.io/library/runtime-operacao:1.1-demo + image: docker.io/library/runtime-operacao:1.2-auditoria # `Never`: a imagem tem de estar no containerd do no ANTES do deploy. # "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome. imagePullPolicy: Never diff --git a/tenants/escolinha-de-teste-2/90-servico-bff.yaml b/tenants/escolinha-de-teste-2/90-servico-bff.yaml new file mode 100644 index 0000000..7d974eb --- /dev/null +++ b/tenants/escolinha-de-teste-2/90-servico-bff.yaml @@ -0,0 +1,89 @@ +# ============================================================================= +# O BFF do tenant. +# +# POR QUE ELE EXISTE AQUI, E NAO COMO BIBLIOTECA +# +# A SPA chama o BFF para quase tudo. Sem ele, `/bff` devolve 502 e o sistema +# abre vazio — foi o que aconteceu nos dois primeiros tenants provisionados, em +# 2026-09-24. As tres saidas estavam registradas desde 2026-09-18; o dono +# escolheu o quinto Deployment, que e o unico que entrega sem refatorar um +# componente que ja roda em producao em dois lugares. +# +# O PRECO ESTA NA COTA, e nao aqui: cinco Deployments precisam de mais que oito +# pods durante um rollout. Ver 00-namespace-quota-netpol.yaml. +# +# AS URLS APONTAM PARA OS RUNTIMES, e nao para os treze servicos: e esta a +# diferenca entre este molde e o `escolinha`. O mapa e o mesmo dos poms: +# core configuracao, cadastro, organizacao, documentos, agenda +# operacao planejamento, campeonato, administrativo, financeiro +# saude saude, nutricao, assistencia-social, pedagogico +# ============================================================================= +apiVersion: apps/v1 +kind: Deployment +metadata: + name: servico-bff + namespace: escolinha-de-teste-2-prod + labels: + app: servico-bff + athleticmap.io/contexto: bff +spec: + replicas: 1 + selector: { matchLabels: { app: servico-bff } } + template: + metadata: + labels: + app: servico-bff + athleticmap.io/contexto: bff + spec: + containers: + - name: servico-bff + image: docker.io/library/servico-bff:2.0-exportacao + imagePullPolicy: Never + ports: [{ containerPort: 8083 }] + env: + - { name: ATM_CONFIG_URL, value: "http://runtime-core" } + - { name: ATM_CADASTRO_URL, value: "http://runtime-core" } + - { name: ATM_ORGANIZACAO_URL, value: "http://runtime-core" } + - { name: ATM_DOCUMENTOS_URL, value: "http://runtime-core" } + - { name: ATM_AGENDA_URL, value: "http://runtime-core" } + - { name: ATM_PLANEJAMENTO_URL, value: "http://runtime-operacao" } + - { name: ATM_CAMPEONATO_URL, value: "http://runtime-operacao" } + - { name: ATM_ADMINISTRATIVO_URL, value: "http://runtime-operacao" } + - { name: ATM_FINANCEIRO_URL, value: "http://runtime-operacao" } + - { name: ATM_SAUDE_URL, value: "http://runtime-saude" } + - { name: ATM_NUTRICAO_URL, value: "http://runtime-saude" } + - { name: ATM_ASSISTENCIA_SOCIAL_URL, value: "http://runtime-saude" } + - { name: ATM_PEDAGOGICO_URL, value: "http://runtime-saude" } + - { name: ATM_JWK_SET_URI, value: "http://keycloak.plataforma-prod.svc:8080/realms/athleticmap-7/protocol/openid-connect/certs" } + - { name: ATM_ISSUER, value: "https://auth.athleticmap.com/realms/athleticmap-7" } + - { name: ATM_TENANT, value: "escolinha-de-teste-2" } + - { name: ATM_PLANO, value: "bronze" } + # `optional` porque o molde ainda NAO cria este Secret. Sem ele o + # selo de consentimento simplesmente nao e emitido — o BFF sobe e + # funciona (ver SeloDeConsentimento, que trata segredo vazio). No dia + # em que o Secret existir, isto passa a valer sozinho. + - name: ATM_CONSENTIMENTO_SEGREDO + valueFrom: + secretKeyRef: { name: consentimento-selo, key: segredo, optional: true } + resources: + requests: { cpu: 50m, memory: 256Mi } + limits: { cpu: 500m, memory: 512Mi } + readinessProbe: + httpGet: { path: /bff/health, port: 8083 } + initialDelaySeconds: 20 + periodSeconds: 10 + failureThreshold: 30 + livenessProbe: + httpGet: { path: /actuator/health/liveness, port: 8083 } + initialDelaySeconds: 50 + periodSeconds: 20 + failureThreshold: 6 +--- +apiVersion: v1 +kind: Service +metadata: + name: servico-bff + namespace: escolinha-de-teste-2-prod +spec: + selector: { app: servico-bff } + ports: [{ port: 80, targetPort: 8083 }] diff --git a/tenants/escolinha-de-teste-2/95-frontend-spa.yaml b/tenants/escolinha-de-teste-2/95-frontend-spa.yaml index 05246a8..4992a78 100644 --- a/tenants/escolinha-de-teste-2/95-frontend-spa.yaml +++ b/tenants/escolinha-de-teste-2/95-frontend-spa.yaml @@ -34,7 +34,7 @@ spec: spec: containers: - name: frontend-spa - image: docker.io/library/frontend-spa:2.65-csp + image: docker.io/library/frontend-spa:2.67-csp-script imagePullPolicy: Never ports: [{ containerPort: 80 }] env: diff --git a/tenants/escolinha-de-teste/00-namespace-quota-netpol.yaml b/tenants/escolinha-de-teste/00-namespace-quota-netpol.yaml index 7527a46..ee0fb4c 100644 --- a/tenants/escolinha-de-teste/00-namespace-quota-netpol.yaml +++ b/tenants/escolinha-de-teste/00-namespace-quota-netpol.yaml @@ -51,11 +51,20 @@ metadata: namespace: escolinha-de-teste-prod spec: hard: - requests.cpu: "1" - requests.memory: 1.5Gi - limits.cpu: "4" - limits.memory: 2.5Gi - pods: "8" + # SUBIU em 2026-09-24 para caber o BFF, o quinto Deployment. + # + # Nao e folga generosa: com quatro Deployments o tenant ja usava 1232Mi dos + # 1536Mi, e o BFF pede 256Mi. Caberia no limite antigo em repouso, e + # estouraria no primeiro rollout — que e quando um Deployment sobe o pod + # novo antes de derrubar o velho. Foi essa conta que derrubou o + # provisionamento do `plataforma` em 17/09, e o registro dela esta ali. + # + # `pods` vai a 10 pelo mesmo motivo: cinco Deployments, um surge cada. + requests.cpu: "1.5" + requests.memory: 2Gi + limits.cpu: "5" + limits.memory: 3.5Gi + pods: "10" --- # ============================================================================= # A politica de rede. diff --git a/tenants/escolinha-de-teste/70-runtime-core.yaml b/tenants/escolinha-de-teste/70-runtime-core.yaml index 724326a..d74f8a5 100644 --- a/tenants/escolinha-de-teste/70-runtime-core.yaml +++ b/tenants/escolinha-de-teste/70-runtime-core.yaml @@ -21,7 +21,7 @@ spec: spec: containers: - name: runtime-core - image: docker.io/library/runtime-core:1.1-demo + image: docker.io/library/runtime-core:1.2-auditoria # `Never`: a imagem tem de estar no containerd do no ANTES do deploy. # "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome. imagePullPolicy: Never diff --git a/tenants/escolinha-de-teste/71-runtime-operacao.yaml b/tenants/escolinha-de-teste/71-runtime-operacao.yaml index 693e8f3..599a750 100644 --- a/tenants/escolinha-de-teste/71-runtime-operacao.yaml +++ b/tenants/escolinha-de-teste/71-runtime-operacao.yaml @@ -21,7 +21,7 @@ spec: spec: containers: - name: runtime-operacao - image: docker.io/library/runtime-operacao:1.1-demo + image: docker.io/library/runtime-operacao:1.2-auditoria # `Never`: a imagem tem de estar no containerd do no ANTES do deploy. # "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome. imagePullPolicy: Never diff --git a/tenants/escolinha-de-teste/90-servico-bff.yaml b/tenants/escolinha-de-teste/90-servico-bff.yaml new file mode 100644 index 0000000..f6a964f --- /dev/null +++ b/tenants/escolinha-de-teste/90-servico-bff.yaml @@ -0,0 +1,89 @@ +# ============================================================================= +# O BFF do tenant. +# +# POR QUE ELE EXISTE AQUI, E NAO COMO BIBLIOTECA +# +# A SPA chama o BFF para quase tudo. Sem ele, `/bff` devolve 502 e o sistema +# abre vazio — foi o que aconteceu nos dois primeiros tenants provisionados, em +# 2026-09-24. As tres saidas estavam registradas desde 2026-09-18; o dono +# escolheu o quinto Deployment, que e o unico que entrega sem refatorar um +# componente que ja roda em producao em dois lugares. +# +# O PRECO ESTA NA COTA, e nao aqui: cinco Deployments precisam de mais que oito +# pods durante um rollout. Ver 00-namespace-quota-netpol.yaml. +# +# AS URLS APONTAM PARA OS RUNTIMES, e nao para os treze servicos: e esta a +# diferenca entre este molde e o `escolinha`. O mapa e o mesmo dos poms: +# core configuracao, cadastro, organizacao, documentos, agenda +# operacao planejamento, campeonato, administrativo, financeiro +# saude saude, nutricao, assistencia-social, pedagogico +# ============================================================================= +apiVersion: apps/v1 +kind: Deployment +metadata: + name: servico-bff + namespace: escolinha-de-teste-prod + labels: + app: servico-bff + athleticmap.io/contexto: bff +spec: + replicas: 1 + selector: { matchLabels: { app: servico-bff } } + template: + metadata: + labels: + app: servico-bff + athleticmap.io/contexto: bff + spec: + containers: + - name: servico-bff + image: docker.io/library/servico-bff:2.0-exportacao + imagePullPolicy: Never + ports: [{ containerPort: 8083 }] + env: + - { name: ATM_CONFIG_URL, value: "http://runtime-core" } + - { name: ATM_CADASTRO_URL, value: "http://runtime-core" } + - { name: ATM_ORGANIZACAO_URL, value: "http://runtime-core" } + - { name: ATM_DOCUMENTOS_URL, value: "http://runtime-core" } + - { name: ATM_AGENDA_URL, value: "http://runtime-core" } + - { name: ATM_PLANEJAMENTO_URL, value: "http://runtime-operacao" } + - { name: ATM_CAMPEONATO_URL, value: "http://runtime-operacao" } + - { name: ATM_ADMINISTRATIVO_URL, value: "http://runtime-operacao" } + - { name: ATM_FINANCEIRO_URL, value: "http://runtime-operacao" } + - { name: ATM_SAUDE_URL, value: "http://runtime-saude" } + - { name: ATM_NUTRICAO_URL, value: "http://runtime-saude" } + - { name: ATM_ASSISTENCIA_SOCIAL_URL, value: "http://runtime-saude" } + - { name: ATM_PEDAGOGICO_URL, value: "http://runtime-saude" } + - { name: ATM_JWK_SET_URI, value: "http://keycloak.plataforma-prod.svc:8080/realms/athleticmap-6/protocol/openid-connect/certs" } + - { name: ATM_ISSUER, value: "https://auth.athleticmap.com/realms/athleticmap-6" } + - { name: ATM_TENANT, value: "escolinha-de-teste" } + - { name: ATM_PLANO, value: "bronze" } + # `optional` porque o molde ainda NAO cria este Secret. Sem ele o + # selo de consentimento simplesmente nao e emitido — o BFF sobe e + # funciona (ver SeloDeConsentimento, que trata segredo vazio). No dia + # em que o Secret existir, isto passa a valer sozinho. + - name: ATM_CONSENTIMENTO_SEGREDO + valueFrom: + secretKeyRef: { name: consentimento-selo, key: segredo, optional: true } + resources: + requests: { cpu: 50m, memory: 256Mi } + limits: { cpu: 500m, memory: 512Mi } + readinessProbe: + httpGet: { path: /bff/health, port: 8083 } + initialDelaySeconds: 20 + periodSeconds: 10 + failureThreshold: 30 + livenessProbe: + httpGet: { path: /actuator/health/liveness, port: 8083 } + initialDelaySeconds: 50 + periodSeconds: 20 + failureThreshold: 6 +--- +apiVersion: v1 +kind: Service +metadata: + name: servico-bff + namespace: escolinha-de-teste-prod +spec: + selector: { app: servico-bff } + ports: [{ port: 80, targetPort: 8083 }] diff --git a/tenants/escolinha-de-teste/95-frontend-spa.yaml b/tenants/escolinha-de-teste/95-frontend-spa.yaml index 8468329..f395aa9 100644 --- a/tenants/escolinha-de-teste/95-frontend-spa.yaml +++ b/tenants/escolinha-de-teste/95-frontend-spa.yaml @@ -34,7 +34,7 @@ spec: spec: containers: - name: frontend-spa - image: docker.io/library/frontend-spa:2.65-csp + image: docker.io/library/frontend-spa:2.67-csp-script imagePullPolicy: Never ports: [{ containerPort: 80 }] env: