Документация Accelera

Развертывание Accelera в k8s

Необходимые инструменты

  • helm
  • helmfile
  • sops
  • kubectl
  • kustomize
  • helm secrets
  • docker
  • helm diff

Установка инструментов

Данная установка для Ubuntu 24.04. Если будет другая ОС, то установка будет отличаться.

helm

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version

helmfile

wget https://github.com/helmfile/helmfile/releases/download/v0.171.0/helmfile_0.171.0_linux_amd64.tar.gz
tar -xvzf helmfile_0.171.0_linux_amd64.tar.gz
sudo mv helmfile /usr/local/bin/
helmfile --version

kubectl

snap install kubectl --classic
kubectl version

helm secrets

helm plugin install https://github.com/zendesk/helm-secrets

docker

snap install docker

helm diff

helm plugin install https://github.com/databus23/helm-diff

Доп. шаги перед развертыванием

  • Установка ключей шифрования (опционально)

    Инструкции по шифрованию в k8s с использованием sops

  • Связать докер с реестром контейнеров, например Yandex Container Registry (опционально)

    docker login
    yc container registry configure-docker #Команда подразумевает установленной yc cli и пройденной авторизации
  • Иметь в наличии образы Accelera и Helm chart

  • Иметь в наличии базовый конфиг для установки Accelera

Понимание структуры

Вся конфигурация описывается в файлах values.yaml

Допустимые значения в helm чарте развертывания Accelera

Задавать переменные окружения/значения для шаблона можно двумя способами

  • Глобально для всех сервисов, по пути

    flows/accelera-t/envs.yaml #для переменных окружения

    и

    flows/accelera-t/values.yaml #для значений шаблона
  • Для конкретного сервиса, по пути

    services/<service-name>/accelera-t/envs.yaml #для переменных окружения конкретного сервиса

    и

    services/<service-name>/accelera-t/values.yaml #для значений шаблона конкретного сервиса

При этом приоритетными станут значения для конкретного сервиса

Пример:

Указание переменных глобально

envVars: 
  LOGGER_LEVEL: info
  NODE_ENV: production
  ENABLE_METRICS: "true"
  METRICS_PORT: 3010

Указание переменных конкретно для сервиса

envVars: 
  ENABLE_METRICS: "false"
  METRICS_PORT: 6040

Итогом станет объект ConfigMap с таким значением

envVars: 
  LOGGER_LEVEL: info
  NODE_ENV: production
  ENABLE_METRICS: "false"
  METRICS_PORT: 6040

Для secret.yaml правила те же, но создается объект Kubernetes secret

Установка

Устанавливаем сервис командой

helmfile -e accelera-t -f services/<service-name>/helmfile.yaml sync

Вместо sync можно использовать template(не выпускает релиз), чтобы увидеть, как значения манифестов подтянулись в развертывание, а diff(не выпускает релиз), показывает разницу между прошлым и текущим развертыванием

  • Установку можно вынести в отдельный файл с перечислением всех сервисов

    Пример:

    файл helmfile.yaml

    environments:
      accelera-t:
    helmfiles:
      - path: services/flows-backoffice/helmfile.yaml
      - path: services/flows-actions/helmfile.yaml
      - path: services/flows-frontend/helmfile.yaml
      - path: services/flows-bulk/helmfile.yaml
      - path: services/flows-engine/helmfile.yaml
      - path: services/flows-segments/helmfile.yaml
      - path: services/flows-timers/helmfile.yaml

Тогда командой для развертывания станет

helmfile -e accelera-t -f path/to/helmfile.yaml sync

Важные замечания при развертывании

  • flows-backoffice и flows-segments должны иметь общий volume
  • persistence.accessModes должен быть ReadWriteMany (это правило можно опустить, если все сервисы лежат на одной ноде и развертывание сервисов требующих Persistant Volume указано в одной реплике ReplicaCount)

Пример базового сценария развертывания

Подразумевается, что уже указаны все значения для envs.yaml и values.yaml

  1. Устанавливаем redis (если хотим, чтоб он был в кластере рядом с Accelera)
helmfile -e accelera-t -f services/redis/helmfile.yaml sync

Из вывода в консоли командой получаем redis-password, указываем его в envs.yaml

  1. Устанавливаем rabbitmq (если хотим, чтоб он был в кластере рядом с Accelera)
helmfile -e accelera-t -f services/accelera-broker/helmfile.yaml sync

И указать дефолтные креды для accelera-broker (уточнять при развертывании)

  1. Выносим развертывания в отдельный файл helmfile.yaml
environments:
  accelera-t:
helmfiles:
  - path: services/flows-backoffice/helmfile.yaml
  - path: services/flows-actions/helmfile.yaml
  - path: services/flows-frontend/helmfile.yaml
  - path: services/flows-bulk/helmfile.yaml
  - path: services/flows-engine/helmfile.yaml
  - path: services/flows-segments/helmfile.yaml
  - path: services/flows-timers/helmfile.yaml
  1. Запускаем развертывание
helmfile -e accelera-t -f path/to/helmfile.yaml sync
  1. Устанавливаем ingress-nginx и cert-manager
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.1/cert-manager.yaml
  1. Устанавливаем ClusterIssuer
kubectl apply -f cluster-issuer.yaml
  1. Устанавливаем IngressClass
kubect apply -f ingress-class.yaml
  1. Устанавливаем сам ingress (перед этим нужно изменить spec.tls.hosts и spec.rules под себя)
kubectl apply -f ingress.yaml

ip, который нужно указать при выпуске домена, можно узнать из команды

kubectl get svc --all-namespaces | grep "ingress-nginx" | grep "LoadBalancer"

На выходе получается готовый redis с rabbit’ом, привязанная к ним базовая Accelera и настроенная ingress маршрутизация через https

На этой странице