Перейти к основному содержимому

Манифесты для kustomize

Вариант установки Time в k8s с помощью манифестов kustomize.

Схема потоков данных

Ниже — схема потоков данных для варианта установки в k8s (с параметрами и портами по умолчанию):

k8s Scheme

Структура репозитория

  • 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 должен заработать на адресе, который настроен администраторами самостоятельно на балансировщиках в качестве точки входа.