Установить ArchMap в Kubernetes
Примечание
Для установки в Kubernetes у ArchMap есть Helm-чарт. В поде работает один процесс, который отдаёт и интерфейс, и API. Перед его запуском init-контейнер проверяет базу и применяет миграции. Под работает без прав root и привилегий, с корневой файловой системой только для чтения, и проходит профиль Pod Security «restricted». PostgreSQL чарт не ставит, поэтому нужна своя база.
Примечание
Что понадобится:
- Kubernetes 1.25 или новее и Helm 3.8 или новее;
- Gateway API (Gateway в кластере) или Ingress-контроллер с TLS;
- сетевой доступ из подов к PostgreSQL;
- отдельное DNS-имя для ArchMap: работа по подпути (например,
https://portal.example.com/archmap/) не поддерживается.
По умолчанию под запрашивает 0,1 CPU и 256 МБ памяти, а предел памяти составляет 1 ГБ.
Подготовить базу PostgreSQL#
Примечание
ArchMap хранит все данные в PostgreSQL версии 15 или новее. Базу готовит администратор PostgreSQL, а таблицы ArchMap создаст сам при первом запуске. Расширения не нужны.
Чтобы подготовить базу, выполните следующие действия:
-
Создайте пользователя и базу в кодировке UTF-8, владельцем которой будет этот пользователь:
CREATE ROLE archmap LOGIN PASSWORD 'ПАРОЛЬ'; CREATE DATABASE archmap OWNER archmap ENCODING 'UTF8' TEMPLATE template0; -
В файле
pg_hba.confразрешите пользователюarchmapподключаться к базеarchmapс адресов, с которых работает ArchMap. -
Перечитайте настройки PostgreSQL:
SELECT pg_reload_conf(); -
Составьте адрес базы для ArchMap (например,
postgresql://archmap:ПАРОЛЬ@pg.example.com:5432/archmap).
Примечание
Спецсимволы пароля в адресе базы нужно закодировать: @ → %40, : → %3A, / → %2F, % → %25, # → %23, ? → %3F. Если PostgreSQL требует TLS, допишите к адресу ?sslmode=require.
Установить чарт#
Чтобы установить ArchMap в кластер, выполните следующие действия:
-
Создайте пространство имён и Secret с адресом базы:
kubectl create namespace archmap kubectl -n archmap create secret generic archmap-db \ --from-literal=database-url='postgresql://archmap:ПАРОЛЬ@pg.example.com:5432/archmap' -
Создайте файл значений
archmap-values.yamlс адресом базы и способом публикации:-
для Gateway API:
database: existingSecret: archmap-db httpRoute: enabled: true parentRefs: - name: main-gateway namespace: gateway-system hostnames: - archmap.example.com -
для Ingress:
database: existingSecret: archmap-db ingress: enabled: true className: nginx hosts: - host: archmap.example.com paths: - path: / pathType: Prefix tls: - secretName: archmap-tls hosts: - archmap.example.com
-
-
Установите чарт:
helm install archmap oci://ghcr.io/eidunyushkinhse/charts/archmap -n archmap \ -f archmap-values.yaml --wait -
Проверьте установку:
helm test archmap -n archmap -
Создайте первого администратора. Команда дважды спросит пароль:
kubectl -n archmap exec -it deploy/archmap -c archmap -- archmap-admin create-admin admin -
Откройте адрес ArchMap (например,
https://archmap.example.com) и войдите под учётной записью администратора. -
Заведите учётные записи для коллег (см. Создать учётные записи и назначить роли).
Примечание
Чарт по умолчанию берёт образ ghcr.io/eidunyushkinhse/archmap своей версии (для linux/amd64 и linux/arm64). Как поставить ArchMap в кластер без доступа в интернет или из своего реестра, см. Установить ArchMap в закрытом контуре.
Примечание
Ключ подписи входа чарт создаст сам и сохранит при обновлениях. Чтобы задать свой ключ, укажите в значении secretKey.existingSecret имя Secret с ключом secret-key длиной не меньше 32 символов.
Примечание
Gateway или Ingress-контроллер должен:
- ждать ответа до 300 секунд, потому что столько может занять ввоз большого архива или запрос ИИ-агента. У HTTPRoute чарт задаёт тайм-аут сам, а для Ingress задайте его аннотациями контроллера в значении
ingress.annotations; - принимать запросы размером не меньше
config.maxRequestMb(по умолчанию 64 МБ); - дописывать адрес пользователя последним в заголовок
X-Forwarded-For, потому что по нему ArchMap ограничивает попытки входа. Так делают все распространённые контроллеры. Если перед подом нет прокси (например, Service типа LoadBalancer смотрит наружу), задайтеconfig.trustForwardedFor: false.
Примечание
Чарт создаёт Deployment archmap (init-контейнер migrate и приложение на порту 8080), Service archmap (порт 80 внутри кластера), Secret archmap (ключ подписи и, если не задан database.existingSecret, адрес базы) и HTTPRoute или Ingress archmap, если публикация включена. Остальные значения чарта описаны в справочнике настроек.