Манифесты для kustomize
Вариант установки Time в k8s с помощью манифестов kustomize.
Схема потоков данных
Ниже — схема потоков данных для варианта установки в k8s (с параметрами и портами по умолчанию):
Структура репозитория
- time-front
- base — базовое описание веб-приложения Time
- time-server
- base — базовое описание приложения Time
- overlay — перезапись базового конфига в зависимости от роли
- time-app — основное приложение, минимально необходимая часть работающего мессенджера
- time-app-jobs (опционально) — вспомогательная часть, позволяет не загружать основное приложение тяжелыми задачами (индексация/миграция/etc...)
- time-push-notification-server — сервис, необходимый для отправки пушей в мобильное приложение (iOS/Android)
- slack-time-proxy (опционально) — реализует упрощенный прокси-сервер и переводит входящие вызовы Slack API на Time backend
Подготовка
Создайте секрет для авторизации в Docker Registry:
kubectl create secret docker-registry regcred \
--docker-server=docker.registry.tbank.ru \
--docker-username=time-public \
--docker-password=<ПАРОЛЬ> \
--docker-email=time_support@tbank.ru \
--namespace=time
Конфигурирование приложения
Job server
time-jobs не является обязательной частью для работы приложения, если нагрузка на основное приложение не существенна, то оно может так же выполнять джобы, для этого в файле time-server/overlay/time-app/app/deploy.vars.patch.yaml необходимо переопределить переменные ("false"
→ "true"
):
- name: TIME_JOBSETTINGS_RUNJOBS
value: "true"
- name: TIME_JOBSETTINGS_RUNSCHEDULER
value: "true"
Соответственно, в такой конфигурации нет необходимости отдельного деплоя time-jobs.
Переменные окружения
Для базового конфигурирования приложения необходимо внести изменения в файл time-server/base/cfg/time-envs
— формат ввода указан в качестве примера.
Тонкое конфигурирование приложения, как правило, осуществляется в файле time-server/overlay/time-app/app/deploy.vars.patch.yaml
с помощью переменных окружения.
Исключение составляет настройка работы плагина workflow — необходимо внести изменения в time-server/base/cfg/config-template.json
— параметры dsn
:
"Plugins": {
"ru.tinkoff.mm.workflow": {
"dsn": "postgres://WF_USERNAME:WF_PASSWORD@INSTANCE_ADDR:6432/WF_DB_NAME?sslmode=disable&connect_timeout=10&binary_parameters=yes",
}
}
Аналогично конфигурируется time-front:
- в файле
time-server/base/cfg/time-front-envs
необходимо указать ваш домен Time - в файле
time-server/base/cfg/nginx.conf.template
можно изменить конфигурацию веб-сервера Nginx (при необходимости)
Для переопределения base-конфигурации time-front также можно создать папку overlay
по аналогии с time-server.
Deploy k8s
Для сборки k8s манифестов необходим kustomize (тестировано на версии v4.5.5).
kustomize build time-kustomize/time-server/overlay/time-app/app/ [-o time-server.yaml (опция вывода манифестов в файл)]
kustomize build time-kustomize/time-server/overlay/time-app-jobs/app [-o time-jobs.yaml (опция вывода манифестов в файл)]
Подразумевается, что у вас уже создан namespace для деплоя приложения (kubectl create namespace time
).
Соответственно, команды для деплоя приложения будет выглядеть следующим образом:
-
Time — основное приложение:
kustomize build time-kustomize/time-server/overlay/time-app/app/ | kubectl apply -f - -n time
-
Time — Jobs (опционально):
kustomize build time-kustomize/time-server/overlay/time-app-jobs/app | kubectl apply -f - -n time
-
time-front — веб-интерфейс Time:
kustomize build time-kustomize/time-front/base/ | kubectl apply -f - -n time
-
PNS (Push Notification Service) — необходимо для получения push-нотификаций в мобильном приложении:
kustomize build time-kustomize/time-push-notification-server/base/ | kubectl apply -f - -n time
-
slack-time-proxy:
kustomize build time-kustomize/slack-time-proxy/app.slack-time-proxy/ | kubectl apply -f - -n time
После выполнения всех действий Time должен заработать на адресе, который настроен администраторами самостоятельно на балансировщиках в качестве точки входа.