Files
athletic-map-deploy/tenants/plataforma/25-servico-voz.yaml
T

54 lines
2.0 KiB
YAML

# Servico de voz (transcricao de AUDIO JA GRAVADO, portugues) — faster-whisper, modelo `small`, CPU int8.
# Fonte: services/servico-voz do repositorio de codigo. Um so para todos os tenants: quem chama e o BFF de cada
# tenant (`ATM_TRANSCRICAO_URL`), nunca o navegador. SEM Ingress: a protecao e a rede (24-netpol-tenants-na-voz).
# O audio so existe em memoria/arquivo temporario durante a transcricao; o texto nao vai para log.
# Uma transcricao por vez (o modelo usa 3 threads); 1 min de audio leva ~20-40 s de CPU.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: servico-voz
namespace: plataforma-prod
labels: { app: servico-voz }
spec:
replicas: 1
# Recreate: um pod so, com o modelo em memoria; duas copias na troca estourariam a cota da plataforma.
strategy: { type: Recreate }
selector: { matchLabels: { app: servico-voz } }
template:
metadata:
labels: { app: servico-voz }
spec:
securityContext: { runAsNonRoot: true, runAsUser: 10001 }
containers:
- name: servico-voz
image: docker.io/library/servico-voz:1.1-small
imagePullPolicy: Never
ports: [{ containerPort: 8091 }]
env:
- { name: ATM_VOZ_MODELO, value: "small" }
- { name: ATM_VOZ_THREADS, value: "2" }
- { name: ATM_VOZ_MAX_MB, value: "25" }
resources:
requests: { cpu: 200m, memory: 450Mi }
limits: { cpu: "2", memory: 2Gi }
readinessProbe:
httpGet: { path: /saude, port: 8091 }
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
httpGet: { path: /saude, port: 8091 }
initialDelaySeconds: 60
periodSeconds: 30
failureThreshold: 4
---
apiVersion: v1
kind: Service
metadata:
name: servico-voz
namespace: plataforma-prod
labels: { app: servico-voz }
spec:
selector: { app: servico-voz }
ports: [{ name: http, port: 8091, targetPort: 8091 }]