Transcoding services
Версия чарта
Версия чарта: 260521.213.3121
OCI-репозиторий: cr.yandex/crpt9c7igqasaqddbg0p/backend/transcoder/worker/charts/transcoder-worker
Введение
transcoder-worker — это основной сервис, который отвечает за обработку видео-чанков. Сервис считывает сообщения из двух очередей (обычная и низкий приоритет) и выполняет транскодирование чанков с помощью ffmpeg.
Важно: Ingress для этого сервиса не требуется (работает как background worker).
Необходимые Secret'ы
Для развертывания необходимы следующие Secret'ы:
ConfigMap'ы генерируются автоматически из шаблонов чарта:
medikt-transcoder-worker-appsettings.jsonmedikt-transcoder-common-appsettings.common.json(общая конфигурация)
Получение чарта из OCI-репозитория
helm pull oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/transcoder/worker/charts/transcoder-worker \
--version 260521.213.3121 \
--untar --untardir ./charts
Развертывание
Установка
helm install medikt-transcoder-worker ./charts/transcoder-worker \
--namespace prod \
--values ./values/transcoder-worker_prod.yaml \
--create-namespace
Обновление
helm upgrade medikt-transcoder-worker ./charts/transcoder-worker \
--namespace prod \
--values ./values/transcoder-worker_prod.yaml
Удаление
helm uninstall medikt-transcoder-worker --namespace prod
Конфигурация (values.yaml)
Основные параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
dotnet_environment | string | Staging | Должно быть Production |
replicaCount | int | 4 | Количество реплик |
terminationGracePeriodSeconds | int | 60 | Время на graceful shutdown |
image.repository | string | cr.yandex/.../worker | Docker образ |
image.pullPolicy | string | IfNotPresent | Политика pull образа |
Нагрузка и масштабирование
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
resources.limits.cpu | string | 8000m | Лимит CPU (8 ядер) |
resources.requests.cpu | string | 4000m | Запрос CPU (4 ядра) |
autoscaling.enabled | bool | true | Включить autoscaling |
autoscaling.minReplicas | int | 4 | Минимум реплик |
autoscaling.maxReplicas | int | 30 | Максимум реплик |
External Queue Metrics (autoscaling)
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
externalQueueMetrics[].metricName | string | queue_messages_stored_count | Имя метрики |
externalQueueMetrics[].queueName | string | medikt-net-chunks-mq | Основная очередь |
externalQueueMetrics[].queueTargetMessages | int | 5 | Целевое количество сообщений на под |
Вторая очередь (низкий приоритет)
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
externalQueueMetrics[].queueName | string | medikt-net-chunks-low-priority-mq | Очередь низкого приоритета |
externalQueueMetrics[].queueTargetMessages | int | 15 | Целевое количество сообщений на под (x3 от обычной) |
Volumes
| Имя volume | Тип | Mount path | Описание |
|---|---|---|---|
appsettings-volume | configMap | /app/appsettings.environment.json | Конфигурация приложения |
appsettings-common | configMap | /app/appsettings.common.json | Общая конфигурация |
Аффинность
Сервис размещается на нодах с label workers_affinity=true и требует preemptible ноды (yandex.cloud/preemptible=true).
Примеры значений
Производственная конфигурация (prod)
dotnet_environment: Production
resources:
limits:
cpu: 8000m
requests:
cpu: 4000m
autoscaling:
enabled: true
minReplicas: 4
maxReplicas: 30
externalQueueMetrics:
- metricName: "queue_messages_stored_count"
queueName: "medikt-net-chunks-mq"
queueTargetMessages: 5
- metricName: "queue_messages_stored_count"
queueName: "medikt-net-chunks-low-priority-mq"
queueTargetMessages: 15
Проверка развертывания
# Проверка статуса релиза
helm list -n prod
# Проверка подов
kubectl get pods -n prod -l app.kubernetes.io/name=transcoder-worker
# Логи пода
kubectl logs -n prod <pod-name> -f
Примечания
- Сервис использует exec-based probes для health check (проверка файла
/tmp/healthy) - Graceful shutdown - 60 секунд
- Autoscaling настроен по двум очередям:
medikt-net-chunks-mq- основная очередь (5 сообщений/под)medikt-net-chunks-low-priority-mq- очередь низкого приоритета (15 сообщений/под)
- Нагрузка на CPU около 8000m при активной работе (8 ядер)
- Требуются preemptible ноды для экономии ресурсов
- Максимум 30 реплик для обработки пиковых нагрузок