# 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 }]