Развертывание PLAN-R Helm Chart

Подготовка к развертыванию

Для развертывания системы необходимо:

  • Настроенный кластер Kubernetes или Deckhouse
  • Утилиты для работы с кластером: kubectl и менеджер пакетов helm
  • Для внешнего доступа необходим настроенный ingress (например nginx или traefik).

    Важно! Ingress должен поддерживать протокол WebSocket.

  • В качестве постоянного хранилища может использоватся s3 совместимые хранилища (Minio, Закрома.Хранение).

    При использовании другого типа необходимо убедится что сsi контроллер поддерживает тип доступа ReadWriteMany (т.к. всем подам PLAN-R будет необходим доступ к файлам)

  • Необходим доступ к реестру образов: registry.dppm.pro (открытый).

    При использовании частного реестра образов, будет необходимо настроить проксирование образов из публичного репозитория registry.dppm.pro/releases в частный. Также возможна ручная загрузка образов из скомплекта поставки в частный репозиторий.

Рекомендации:

  • Производить установку базы данны Postgresql на выделенный сервер или кластер серверов, для обеспечения большей стабильности, простоты управления и отказоустойчивости.

    При развертывании базы данных через helm chart убедится что используется нужный csi драйвер, с ReclaimPolicy: Retain (для избежания потери данных)

  • Для внешнего доступа по HTTS необходимо сгенерировать самоподписаный сертификат, либо использовать cert-manager для автоматизации запроа и выдачи SSL сертификатов;
  • Постоянное хранилище для redis не является необходимым, все данные хранятся в оперативной памяти, потеря данных не критична;
  • При установки helm chart создать отдельный файл для значений, в нем хранить только те значения которые отличаются от оригинального values.yaml, это упростит поддержку и последующее обновления системы.

Получение PLAN-R Helm Chart

PLAN-R Helm Chart можно получить следующими способами:

  1. Из комплекта поставки. При это версия Helm Chart будет соответствовать версии образов
  2. Из публичного OCI репозитория registry.dppm.pro/charts

При получении из OCI репозитория PLAN-R Helm Chart можно также скачать напрямую (по умолчанию - последняя версия, при необходимости версию можно указать с помощью аргумента --version)

helm pull oci://registry.dppm.pro/charts/planr --version 1.0.0

register imageПолучение PLAN-R Helm Chart

Получение образов системы

  1. Из комплекта поставки.

При использовании этого способа будет необходимо вручную загрузить полученые образа в частный репозиторий, для дальнейшего их использования в k8s

Также необходимо будет переопределить все ссылки на docker обрызы в values.yaml

Для этого используем скрипт load.sh из комплекта поставки для газрузки полученых образов в частный репозиторий. Перед публикацией образов необходимо дополнительно выполнить аутентификацию в этом репозитории

docker login <registry>

./load.sh --help
./load.sh <path-to-image> <registry> --push

register imageЗагрузка образов системы в частный репозиторий

  1. Из публичного OCI репозитория registry.dppm.pro/releases

При использовании этого способа также доступны docker образы на базе РЕД ОС 7.3, для их использования необходимо добавить redos в конце каждого тэга. Для постоянного их использования переопределить параметр planrGlobal.image.redos=true

Также можно настроить проксирование образов из registry.dppm.pro/releases в приватный репозиторий для их использования в закрытом контуре.

Создание необходимых секретов

Конфигурация секретов хранится в секции planrGlobal.secrets. Для удобства они унифицированы, при разворачивании создасётся секрет со всеми необходимыми ключами.

Также секреты можно переопределить вручную изменив необходимые значения в файле values.yaml. Создать можно как один унифицированный секрет с множеством ключей, так и несколько секретов с одним ключом.

Задание необходимых секретов происходит в секции planrConfig.secrets:

planrConfig:
  secrets:
    postgresqlUrl:
      value: "postgresql://planr:planr@{{ .Release.Name }}-postgresql-hl:5432/planr"
      createSecretForPostgres: false
      existingSecret: ""
      existingSecretKey: ""

где :

  • planrConfig - секция отвечающая за общую конфигурацию PLAN-R;
  • secrets - секция отвечающая за работу с секретами;
  • postgresqlUrl - пример секрета содержащего строку подключения к postgresql;
  • value - значения секрета по умолчанию (если не создается вручную). Также в это поле можно вписать желаемое значение которое поместится в созданный секрет (хранение значений в values.yml - не безопасно);
  • createSecretForPostgres - переключатель автоматического создания секрета для postgresql (при установки postgresql как sub chart);
  • existingSecret- имя секрета созданного вручную (при заполнении этого поля value и createSecretForPostgres не учитываются);
  • existingSecretKey- ключ секрета созданного вручную.

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

  • Строка подключения к Postgresql;
  • Строка подключения к RabbitMq;
  • Строка подключения к Redis.

Для создания секретов выполним следующую команду (При необходимости их можно будет изменить), учтем что значения секретов хранятся в base64.

Важно: название созданного секрета должно отличаться от созданных секретов в planr (название {{ .Release.Name }}-unified.

Для создания из командной строки:

kubectl create secret generic --namespace planr planr-connection \
  --from-literal=postgresql-url='postgresql://planr:planr@planr-postgresql-hl:5432/planr' \
  --from-literal=rabbitmq-url='amqp://planr:planr@planr-rabbitmq-headless:5672/planr' \
  --from-literal=redsi-url='amqp://planr:planr@planr-rabbitmq-headless:5672/planr'

Для явного создания из yaml файла можно воспользоваться конструкцией:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: planr-connection
  namespace: planr
type: Opaque
stringData:
  postgresql-url: postgresql://planr:planr@planr-postgresql-hl:5432/planr
  rabbitmq-url: amqp://planr:planr@planr-rabbitmq-headless:5672/planr
  redsi-url: amqp://planr:planr@planr-rabbitmq-headless:5672/planr
EOF

Если необходимом поменять секрет после развертывания можно выполнить следующую команду:

kubectl edit -n planr secret planr-connection

Вносим значения созданных секретов в values-planr.yaml

planrConfig:
  secrets:
    postgresqlUrl:
        existingSecret: planr-connection
        existingSecretKey: postgresql-url
    rabbitmqUrl:
        existingSecret: planr-connection
        existingSecretKey: rabbitmq-url
    redisUrl:
        existingSecret: planr-connection
        existingSecretKey: redsi-url

Важно:: Для вступления изменений в силу необходимо перезагрузить все поды использующие этот секрет.

Настройка хранилищ

Для настройки хранилища используется секция persistence

При использовании S3 - совместимого хранилища (настраивается в консоли администрирования), оставить persistence.enabled=false

Базовая настройка хранилища выглядит следующим образом:

persistence:
  enabled: true
  storageClass: "Longhorn" # Используемый Storage Class
  size: 100Gi  # желаемый размер хранилища

Если том уже создан, можно указать его с помощью persistence.existingClaim=existing-pvc

Настройка внешнего доступа

Внешний доступ настраивается в секции ingress

Есть 2 варианта создания:

  1. Создать 1 ingress для доступа к пользовательскому интерфейсу и консоли администрирования (/admin), на одном домене

При этом конфигурация примет следующий вид:

ingress:
  main:
    enabled: true
    hostname: planr.local
    ingressClassName: "nginx"

В этом случаи пользовательский интерфейс будет доступен на домене planr.local, а консоль администратора на planr.local/admin

Если явно не указать ingressClassName, при создании ingress объекта будет использован ingress класс по умолчанию

  1. Создание двух отдельных ingress ресурсов для пользовательского интерфейса и консоли администратора.

При этом конфигурация примет следующий вид:

ingress:
  main:
    enabled: true
    hostname: planr.local
    ingressClassName: "nginx"
  admin:
    enabled: true
    hostname: planr-admin.local
    ingressClassName: "nginx"

В этом случаи пользовательский интерфейс будет доступен на домене planr.local, а консоль администратора на planr-admin.local/admin

  1. Настройка внешнего доступа через сервис типа NodePort: Согласно схеме архитектуры необходимо будет настроить 3 сервиса (planrMain.service, planrAdmin.service, planrApi.service) с типом NodePort, для этого нужно переопределить значения для этих сервисов в values.yml
planrMain:
  service:
    type: NodePort
    nodePorts:
      http: "30800" (фиксация порта из промежутка 30000-32767)

planrAdmin:
  service:
    type: NodePort
    nodePorts:
      http: "30801" (фиксация порта из промежутка 30000-32767)

planrApi:
  service:
    type: NodePort
    nodePorts:
      http: "30802" (фиксация порта из промежутка 30000-32767)

В этом случае сервисы откроются с типом NodePort и будут доступны на выбранных портах нод кластера.

Настройка TLS/SSL для внешнего доступа

  1. Использование самоподписанных сертификатов предварительно созданных в качестве секрета.
kubectl create secret planr.local-tls \
  --cert=tls.crt \
  --key=tls.key \
  --namespace=planr

tls.crt должен содержать всю цепочку сертификатов

Пример использования в values.yml

ingress:
    main:
      enabled: true
      hostname: planr.local
      ingressClassName: nginx
      tls: true
      extraTls:
        - hosts:
            - planr.local
        secretName: planr.local-tls
  1. Выдача сертификатов через cert-manager с помощью Issuer или ClusterIssuer.

Пример выдачи сертификатов для ingress ресурса через cluster issuer.

ingress:
  main:
    enabled: true
    hostname: plan-r.tech
    ingressClassName: traefik
    annotations:
      cert-manager.io/cluster-issuer: "letsencrypt-prod"  # использование ClusterIssuer для выдачи сертификата от letsencrypt
    tls: true

Настройка потребления ресурсов

Потребление ресурсов для всех контейнеров настраивается в секции planrGlobal.resources, а также специфичные настройки для следующих контейнеров planrMain.resources, planrApi.resources, planrAdmin.resources, planrWorkers.backup.resources, planrWorkers.planr.resources, planrWorkers.impex.resources, planrWorkers.schedule.resources, planrWorkers.notice.resources, planrWorkers.storage.resources, planrWorkers.csharp.resources, planrWorkers.costr.resources

Пример настройки и потребления ресурсов согласно документации

# Переопределяем limits у специфичных контейнеров согласно аппаратным требованиям из документации:
planrMain:
  resources:
    limits:
      cpu: 1.3
      memory: 2048Mi

planrApi:
  resources:
    limits:
      cpu: 1.3
      memory: 2048Mi

planrAdmin:
  resources:
    limits:
      cpu: 1.3
      memory: 1024Mi

planrWorkers:
  backup:
    resources:
      limits:
        cpu: 1.3
        memory: 12288Mi
  planr:
    resources:
      limits:
        cpu: 1.3
        memory: 4096Mi
  impex:
    resources:
      limits:
        cpu: 1.3
        memory: 8192Mi
  schedule:
    resources:
      limits:
        cpu: 1.3
        memory: 1024Mi
  notice:
    resources:
      limits:
        cpu: 1.3
        memory: 2048Mi
  storage:
    resources:
      limits:
        cpu: 1.3
        memory: 2048Mi
  csharp:
    resources:
      limits:
        cpu: 6
        memory: 12288Mi
  costr:
    resources:
      limits:
        cpu: 1.3
        memory: 4096Mi

Установка PLAN-R helm chart

  1. Проверем подключение и наличие необходимых утилит kubectl, helm
kubectl version
kubectl cluster-info
helm version

register imageПроверка подключения к кластеру

  1. Создаем файл planr-values.yaml (готовые примеры можно посмотреть тута, где будем изменять и хранить только необходимые значения.
vi planr-values.yaml

Просмотреть исходный файл с параметрами можно следующими командами:

Можно записать значение вывода в файл, т.к исходный файл достаточно большой

helm show values plan-r-1.0.0.tgz >> base-values.yaml
helm show values oci://registry.dppm.pro/charts/planr >> base-values.yaml
  1. Выполняем установку

Создать пространство имен можно прямо во время установки, добавив аргумент --create-namespace в качестве аргумента

helm upgrade --install -namespace <namespce> --create-namespace --values=<path_to_custom_values> <RELEASE_NAME> <CHART_PATH>

Для локальной уставки:

helm upgrade --install --namespace planr --create-namespace --values=./planr-values.yaml planr plan-r-1.0.0.tgz

Для установки из OCI репозитория (без аргумента --version установится последняя доступная версия)

helm upgrade --install --namespace planr --create-namespace --values ./planr-values.yaml planr oci://registry.dppm.pro/charts/planr --version 1.0.0

Обновление PLAN-R helm chart

Для обновления выполним следующую команду:

Для обновления PLAN-R Helm chart из комплекта поставки:

helm upgrade --install --namespace planr --create-namespace --values ./planr-values.yaml planr oci://registry.dppm.pro/charts/planr --version 1.1.0

Для обновления PLAN-R Helm chart из репозитория поставки:

helm upgrade --install --namespace planr --create-namespace --values ./planr-values.yaml planr plan-r-1.0.0.tgz --version 1.1.0

Важно:: Если явно не указать параметр --version произойдет обновление до последней доступной версии

Примеры развертывания

Примеры values.yml доступны для просмотра и быстрого использования (в целях тестирования) в директории examples PLAN-R helm chart.

Для быстрого извлечения файлов с примерами можно использовать следующие команды:

Для OCI репозитория

mkdir -p examples && helm pull oci://registry.dppm.pro/charts/planr -d /tmp && tar -xzf /tmp/planr-*.tgz -C ./examples --strip-components=2 "planr/examples/"

Если helm chart уже скачан:

mkdir -p examples && tar -xzf ./planr-1.0.0.tgz -C ./examples --strip-components=2 "planr/examples/"

Файлы примеров будут находится в созданоой директори examples

register imageДиректория с примерами развертывания


509.1-59ba7826