Развертывание 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 можно получить следующими способами:
- Из комплекта поставки. При это версия Helm Chart будет соответствовать версии образов
- Из публичного OCI репозитория registry.dppm.pro/charts
При получении из OCI репозитория PLAN-R Helm Chart можно также скачать напрямую (по умолчанию - последняя версия, при необходимости версию можно указать с помощью аргумента --version)
helm pull oci://registry.dppm.pro/charts/planr --version 1.0.0
Получение PLAN-R Helm Chart
Получение образов системы
- Из комплекта поставки.
При использовании этого способа будет необходимо вручную загрузить полученые образа в частный репозиторий, для дальнейшего их использования в k8s
Также необходимо будет переопределить все ссылки на docker обрызы в values.yaml
Для этого используем скрипт load.sh из комплекта поставки для газрузки полученых образов в частный репозиторий. Перед публикацией образов необходимо дополнительно выполнить аутентификацию в этом репозитории
docker login <registry>
./load.sh --help
./load.sh <path-to-image> <registry> --push
Загрузка образов системы в частный репозиторий
- Из публичного 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 ingress для доступа к пользовательскому интерфейсу и консоли администрирования (/admin), на одном домене
При этом конфигурация примет следующий вид:
ingress:
main:
enabled: true
hostname: planr.local
ingressClassName: "nginx"
В этом случаи пользовательский интерфейс будет доступен на домене planr.local, а консоль администратора на planr.local/admin
Если явно не указать ingressClassName, при создании ingress объекта будет использован ingress класс по умолчанию
- Создание двух отдельных 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
- Настройка внешнего доступа через сервис типа 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 для внешнего доступа
- Использование самоподписанных сертификатов предварительно созданных в качестве секрета.
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
- Выдача сертификатов через 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
- Проверем подключение и наличие необходимых утилит kubectl, helm
kubectl version
kubectl cluster-info
helm version
Проверка подключения к кластеру
- Создаем файл 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
- Выполняем установку
Создать пространство имен можно прямо во время установки, добавив аргумент --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
Директория с примерами развертывания