Работа системы в Kubernetes
Установка с помощью Helm-чарта
Порядок установки:
-
Создать namespace.
-
Создать secret для доступа к приватному реестру Docker-образов системы "CodeScoring", используя адрес (
REGISTRY_URL), логин (USERNAME) и пароль (PASSWORD), полученные от вендора.Альтернативно, можно создать секрет для доступа к реестру с помощью
values.yaml, добавив в поле .Values.imagePullSecrets запись вида -
Установить Helm предпочтительным способом.
-
Выполнить следующие команды для добавления актуального Helm-репозитория на локальную машину:
Настройки параметров Helm-чарта
Настоятельно рекомендуется вносить необходимые изменения до установки CodeScoring, в противном случае может потребоваться полная переустановка системы. Данные инструкции предполагают, что специалист имеет опыт работы с кластером Kubernetes и утилитой Helm.
Все представленные в данном документе ограничения вычислительных ресурсов являются приблизительными. Реальное потребление ресурсов компонентами зависит от нагруженности и конкретных сценариев использования инсталляции.
Для удобного редактирования параметров CodeScoring можно скачать и распаковать исходный код Helm-чарта командой:
В файле values.yaml можно отредактировать нужные переменные, и после этого, находясь в каталоге с исходным кодом Helm-чарта, выполнить команду установки:
Структура чарта предполагает, что абсолютно вся конфигурация, вплоть до описания Kubernetes-ресурсов, описывается в values.yaml, из-за чего данный файл является довольно объемным и его редактирование может быть не столь удобно.
Вполне допустимо и даже рекомендуется, при необходимости в переопределении каких-либо параметров, создать дополнительный файл с произвольным именем, например, values-override.yaml (здесь и далее этот файл будет называться именно так), в котором и переопределить значения необходимых полей.
Для удобства с чартом поставляется шаблон файла values-override.yaml.
В таком случае команда установки будет выглядеть так (порядок указания файлов имеет значение):
Установка с использованием встроенных PostgreSQL и Redis
Чарт предусматривает возможность развертывания PostgreSQL и Redis. Для этого предусмотрены ресурсы StatefulSet.
Чтобы активировать установку PostgreSQL и Redis, необходимо определить следующие параметры в values-override.yaml:
При использовании встроенных баз данных дополнительная конфигурация параметров подключения не требуется.
Подключение к внешним базам данных
При использовании собственной базы данных необходимо убедиться, что она соответствует требованиям.
Подключение к внешнему Redis
Для подключения к внешнему Redis, необходимо указать соответствующие строки подключения в следующих полях, соблюдая соответствие номеров баз данных:
Подключение к PostgreSQL через пулер Pgbouncer
Подключение к внешней PostgreSQL необходимо выполнять с использованием пулера соединений.
Данный вариант подходит, если в существующей инфраструктуре уже развернута PostgreSQL, но пулер соединений не используется. Helm-чарт развернет пулер Pgbouncer и подключит его к существующей PostgreSQL. Необходимо выполнить следующие действия:
-
Сконфигурировать пулер соединений, указав соответствующие данные в следующих полях:
-
Передать созданные в пункте 1 конфигурационные параметры компонентам CodeScoring:
Настройка томов
Dynamic Volume Provisioning с использованием требуемого StorageClass
Чарт создает необходимые тома через Dynamic Volume Provisioning с использованием указанного явно StorageClass.
Для создания ресурсов PersistentVolumeClaim необходимо заполнить следующую секцию values:
Если кластер поддерживает тома с типом доступа ReadWriteMany (RWX), то рекомендуется использовать именно его, так как в этом случае допустимо размещение компонентов инсталляции на разных нодах кластера.
Если же поддержки RWX в кластере нет, либо есть необходимость в использовании RWO по иным причинам, рекомендуется настроить podAffinity, чтобы поды, использующие одни и те же тома были назначены на одну ноду:
Для этого необходимо добавить следующий блок в values-override.yaml:
PersistentVolumeClaim для заранее созданных PersistentVolume
Названия предварительно созданных PersistentVolume можно указать в поле volumeName, например:
Настройка ограничения ресурсов (resource limits)
По умолчанию requests и limits заданы в демонстрационных объемах, не предназначенных для продуктивного использования. Это сделано для обеспечения возможности запуска системы CodeScoring в кластерах с малым количеством ресурсов (например, minikube) c целью тестирования.
При запуске в production-окружении может потребоваться настроить ограничение ресурсов. Это можно сделать, отредактировав следующие поля:
Ограничение ресурсов для init-контейнеров
Настройка ограничений ресурсов для основных контейнеров компонентов
В общем виде ресурсы конфигурируются по следующему шаблону:
Возможно указание как requests и limits вместе, так и по отдельности. Однако, при указании только limits, Kubernetes автоматически выставит requests в таком же объеме, что может негативно сказаться на назначении подов на ноды.
Добавление сертификата удостоверяющего центра (CA)
Для доступа CodeScoring к ресурсам с TLS-сертификатами, подписанными корпоративным удостоверяющим центром (CA) необходимо добавить корневой сертификат удостоверяющего центра (RootCA) в values.yaml в формате ключ: значение,
где ключ - имя файла сертификата, включая расширение .crt, значение - сертификат в формате PEM, в следующее поле:
Допустимо указание неограниченного количества файлов, но критически важно, чтобы каждый сертификат был в отдельном файле.
Переменные окружения
Управление переменными окружения через values
Переменные окружения, а также конфигурационные файлы, используемые компонентами инсталляции, описаны в блоках configMaps и secrets в values.yaml.
В values-override.yaml вынесены наиболее часто переопределяемые параметры конфигурации.
Управление переменными окружения через External Secret
Также присутствует возможность подключать внешние хранилища секретов. Для этого в кластере должен быть установлен External Secrets Operator (ESO). Он добавляет в кластер необходимые CRD (Custom Resource Definition) и обеспечивает связь с хранилищем секретов.
Для создания ресурса ExternalSecret и подключения его к существующему SecretStore необходимо добавить соответствующую запись в блок vaults:
Для передачи созданного секрета всем ресурсам Deployment, в поле deploymentsGeneral.envSecrets необходимо добавить в список название ресурса из блока vaults, например:
Для передачи секрета только одному ресурсу Deployment, необходимо указать его в блоке deployments наряду со всеми секретами, которые уже используются данным ресурсом, например:
Миграция с Helm Chart 2.x.x
Если использовалась встроенная PostgreSQL, перед любыми манипуляциями необходимо сделать бэкап.
Во время миграции инсталляция будет недоступна, поэтому рекомендуется выделять технологическое окно. Для проведения работ потребуется суммарно 5-10 минут.
Шаги для миграции:
-
Удалить все ресурсы Deployment
kubectl delete deployment --all -n codescoring -
Удалить все ресурсы Service
kubectl delete service --all -n codescoring -
Выполнить helm upgrade, предварительно заполнив values.yaml и values-override.yaml согласно пункту Настройки параметров Helm-чарта:
