Content.API
Введение
Версия чарта: 260717.173.1600
OCI-репозиторий: cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api
Ingress: content.medikt.net (управляется через Terraform)
Важно: Управление Ingress для всех сервисов осуществляется через Terraform. Параметр ingress.enabled должен быть установлен в false в values.yaml.
Необходимые Secret'ы
Для развертывания необходимы следующие Secret'ы:
- featbit-appsettings
- contentdb-connection-string
- directorydb-connection-string
- nats-connection-string
- content-sa-creds
- content-searcher-creds
- medikt-jwt-keys
ConfigMap'ы генерируются автоматически из шаблонов чарта. Ingress управляется через Terraform модуль medikt-infra.
Получение чарта из OCI-репозитория
Установка чарта (одной командой)
helm install medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml
Скачивание и распаковка чарта
helm pull oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--untar --untardir ./charts
Обновление чарта
helm upgrade medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml
Развертывание с помощью Helm
Установка (new release)
helm install medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml
Обновление существующего релиза
helm upgrade medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml
Удаление релиза
helm uninstall medikt-content-api --namespace prod
Конфигурация (values.yaml)
Основные параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
dotnet_environment | Staging | Окружение .NET (Dev, Staging, Production) |
replicaCount | 2 | Количество реплик приложения |
image.repository | cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/api | Registry и имя образа |
image.pullPolicy | IfNotPresent | Политика pull образа |
ingress.enabled | false | Включить/отключить Ingress |
Конфигурация приложения (Production)
# Основной хост Medikt
mediktHost: "https://medikt.net"
# CORS
cors:
origins:
- "https://medikt.net"
- "https://my.medikt.net"
# CDN настройки
cdn:
imageHost: "https://cdn.medikt.net"
videoHost: "https://cdn.medikt.net"
# Feature Flags
featureFlags:
eventUri: "https://els-featuremgr.medikt.net"
streamUri: "wss://els-featuremgr.medikt.net"
apiKey: "<env_specific>"
# gRPC адреса соседних сервисов
uploadApiGrpcAddress: "http://medikt-upload-api:8081"
userApiGrpcAddress: "http://medikt-user-api:8081"
transcoderApiGrpcAddress: "dns:///medikt-transcoder-api:8081"
notificationApiGrpcAddress: "http://medikt-notification-api:8081"
Настройки OpenSearch
oss:
secretNameRef: "content-searcher-creds"
indexes:
publicationsVersion: "20260205"
channelsVersion: "20250807"
personasVersion: "20250830_1"
businessProfilesVersion: "20250807"
eventsVersion: "20250808"
Лимиты и ограничения (Production)
contentLimits:
publications:
maximumPerPeriod: 5
periodHours: 24
delayBetweenSeconds: 300
comments:
maximumPerPeriod: 100
periodHours: 24
delayBetweenSeconds: 5
updateTimeLimitHours: 24
search:
periodDays: 365
subscriptions:
maxUserSubscriptions: 1000
maxChannelSubscribers: 100000
channels:
maxUserChannels: 10
bookmarks:
maxCount: 1000
Аffinity и ресурсы
# Аffinity для размещения на определенных нодах
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: api_affinity
operator: In
values:
- "true"
- key: yandex.cloud/preemptible
operator: In
values:
- "false"
# Лимиты ресурсов
resources:
requests:
memory: 300Mi
Проверка развертывания
Проверка статуса релиза
helm status medikt-content-api --namespace prod
Проверка подов
kubectl get pods -n prod -l app.kubernetes.io/name=content-api
Проверка логов
kubectl logs -n prod -l app.kubernetes.io/name=content-api --tail=100 -f
Health Checks
kubectl port-forward -n prod svc/medikt-content-api 8080:8080 &
curl http://localhost:8080/healthz/live
curl http://localhost:8080/healthz/ready
Проверка доступности через Ingress
После настройки Ingress через Terraform, доступ к приложению должен быть доступен по доменному имени (например: content.medikt.net).
Примеры команд
Установка в environment prod
helm install medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml
Обновление с сохранением значений
helm upgrade medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--reuse-values
Проверка конфигурации (dry-run)
helm upgrade medikt-content-api \
oci://cr.yandex/crpt9c7igqasaqddbg0p/backend/content.api/charts/content-api \
--version 260717.173.1600 \
--namespace prod \
--values .values/content-api_prod.yaml \
--dry-run