# NEX-Sprachausgabe (Piper, CPU) auf gpu-pve52, Host-Netz Port 8179 (ufw: nur appsrv08). apiVersion: apps/v1 kind: Deployment metadata: name: nex-tts namespace: nex labels: {app: nex-tts} spec: replicas: 1 strategy: {type: Recreate} selector: matchLabels: {app: nex-tts} template: metadata: labels: {app: nex-tts} spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet nodeSelector: kubernetes.io/hostname: gpu-pve52 containers: - name: piper image: knaster/nex-tts-piper:1.8.0 imagePullPolicy: Never env: - {name: TTS_PORT, value: "8179"} - {name: PIPER_VOICES_DIR, value: /voices} - {name: PIPER_VOICES, value: "de_DE-thorsten-high,de_DE-kerstin-low"} - {name: PIPER_DEFAULT_VOICE, value: de_DE-thorsten-high} - {name: PCM_SAMPLE_RATE, value: "24000"} - {name: TTS_MAX_CHARS, value: "5000"} - {name: TTS_PARALLEL, value: "2"} resources: limits: {cpu: "3", memory: 2Gi} # ein Kern bleibt für whisper-server und das System requests: {cpu: "500m", memory: 512Mi} securityContext: readOnlyRootFilesystem: true volumeMounts: - {name: voices, mountPath: /voices, readOnly: true} - {name: tmp, mountPath: /tmp} startupProbe: httpGet: {path: /health, port: 8179, host: 127.0.0.1} periodSeconds: 5 failureThreshold: 24 readinessProbe: httpGet: {path: /health, port: 8179, host: 127.0.0.1} periodSeconds: 30 livenessProbe: httpGet: {path: /health, port: 8179, host: 127.0.0.1} periodSeconds: 30 failureThreshold: 3 volumes: - name: voices hostPath: {path: /srv/models/piper, type: Directory} - name: tmp emptyDir: {sizeLimit: 64Mi}