Пакет поставки и конфигурация
Состав архива, локальные Helm values, активация, ссылки на Secret и проверка манифестов перед установкой.
Краткий словарь
- Установка Helm (Helm release) — установленный и независимо управляемый набор ресурсов одного чарта.
- Объект Secret — ресурс Kubernetes для ссылок на конфиденциальные значения; поставочные чарты не владеют самими значениями.
- Запрос постоянного тома (PersistentVolumeClaim, PVC) — запрос хранилища для встроенного компонента данных.
- Сетевая политика (NetworkPolicy) — правила допустимых сетевых соединений модулей приложения.
- Интерфейс хранения контейнеров (Container Storage Interface, CSI) и сетевой интерфейс контейнеров (Container Network Interface, CNI) предоставляются кластером заказчика.
Получение материалов и локальные values
Администратор компании открывает «On-premise» в панели, создаёт лицензию, выбирает Kubernetes и нажимает «Скачать материалы развёртывания Kubernetes». Распакуйте massaccess-kubernetes-manual-<version>.tar.gz в защищённый каталог и перейдите в massaccess-kubernetes-manual/. Следуйте INSTALL.ru.md из этой версии. Настройка Kubernetes в панели не требуется; values создаёт и сопровождает ваша DevOps-команда.
- Начните с files/examples/all-external-values.yaml, all-bundled-values.yaml или postgresql-clickhouse-external-values.yaml внутри charts/massaccess/. Скопируйте подходящий пример в work/app-values.yaml; исправьте все адреса и режимы по values.schema.json.
- Для другого сочетания измените четыре dataStores.<имя>.mode. При любом bundled дополнительно создайте work/data-values.yaml из charts/massaccess-data/values.yaml; режимы и bundled.existingSecret должны совпадать в обоих chart.
- Задайте deployment.version из values/massaccess-images.json, images.pullSecrets: [massaccess-registry], runtimeSecret.name: massaccess-runtime и meteringSecret.name: massaccess-metering.
- Задайте реальные application.publicHttpUrl, application.publicWebSocketUrl, namespace, ресурсы, публикацию и networkPolicy. Одноимённые YAML-секции объединяйте; не оставляйте example.test или documentation-installation-id.
- В application.hardwareId внесите SHA-256 строки API_SERVER|MA_NAMESPACE без перевода строки; application.licenseServerUrl возьмите из проверенного activation manifest. При tls: false у внешнего хранилища удалите tlsMode; для PostgreSQL укажите sslmode=disable в DSN внутри Secret.
cp charts/massaccess/files/examples/all-external-values.yaml work/app-values.yaml
# bundled: all-bundled-values.yaml
# mixed: postgresql-clickhouse-external-values.yaml
# Edit work/app-values.yaml for the target cluster.
# If any store is bundled, also prepare work/data-values.yaml:
cp charts/massaccess-data/values.yaml work/data-values.yamlСостав скачиваемого архива
Материалы содержат раскрытые chart, immutable image overlays и активацию компании. Значения Helm, резервные копии и параметры кластера оператор готовит отдельно. Каталог work создаётся локально и в архив не входит.
| Путь | Назначение |
|---|---|
| INSTALL.ru.md | Пошаговая инструкция этой версии на русском языке |
| SHA256SUMS | Контрольные суммы поставляемых chart, образов, активации и helpers |
| charts/massaccess/ | Chart приложения, schema, примеры values, bootstrap-secrets.py и четыре справки внешних хранилищ |
| charts/massaccess-data/ | Chart встроенных хранилищ, schema и базовые values |
| values/massaccess-images.json, values/massaccess-data-images.json | Закреплённые по digest образы и версия поставки; не изменять |
| activation/ | manifest.json, contract.json и три metering-файла; содержит секреты компании |
| bin/ | bundled-storage-preflight.py, palette-delivery.py и его модуль palette/ |
Вспомогательные проверки материалов
Оператор выполняет установку командами Helm и kubectl. Вспомогательные Python-команды имеют отдельные назначения и не выполняют общий сценарий развёртывания.
| Команда | Назначение | Изменяет кластер |
|---|---|---|
| python3 charts/massaccess/files/bootstrap-secrets.py | Проверить подписанную активацию и цель; с --apply создать служебные Secret | Только с --apply |
| python3 bin/bundled-storage-preflight.py | Проверить StorageClass/PVC для bundled; записать evidence и digest | С --run создаёт и удаляет пробные PVC/Pod |
| python3 bin/palette-delivery.py | Получить и проверить текущую облачную палитру, записать локальный Helm overlay | Нет; пишет локальный файл |
Проверка комплекта поставки
В корне распакованного архива выполните sha256sum -c SHA256SUMS. Все строки должны завершаться OK. При ошибке получите материалы заново. Проверка контрольных сумм не заменяет проверку источника скачивания; не заявляйте подпись всего архива. INSTALL.ru.md не включён в SHA256SUMS, который проверяет выбранные материалы.
sha256sum -c SHA256SUMS
umask 077
mkdir -m 700 workАктивация, Secret и первый администратор
В существующем несистемном namespace сначала проверьте activation командой bootstrap-secrets.py без --apply. При успехе внесите hardwareId и licenseServerUrl в app values; при установке повторите команду с --apply. Она создаёт massaccess-runtime, massaccess-metering и massaccess-registry. Secret хранилищ и webhook transport готовит оператор отдельно: application.webhookTransport ссылается на bot config/TLS Secrets для mTLS listener 8443; Receiver/Agent, PKI и общий Redis должны быть настроены до запуска сообщений.
- Не выводите activation/manifest.json или значения Secret. Версия manifest должна совпадать с deployment.version.
- Внешний PostgreSQL: семь DATABASE_URL_* для CORE/GATEWAY/WEBHOOK/WORKER/TELEGRAM/MAX/ARCHIVER; Kafka: producer.username/password, consumer.username/password, admin.username/password; ClickHouse: archiver.username/password, auditor.username/password, migration.username/password; Redis: username, password. При TLS также нужен ca.crt.
- Для каждого bundled нужны отдельные serverSecret и existingSecret. Полный набор ключей, TLS-файлов, ACL и конфигурации берите из INSTALL.ru.md и соответствующего charts/massaccess/files/<store>/README.md. Не используйте пустые или примерные пароли.
- Первый администратор создаётся после готовности Core штатной командой core.bootstrap_onprem_admin с паролем через скрытый ввод. Облачная регистрация компании в on-premise отключена.
MA_HARDWARE_ID="$(printf '%s' "${API_SERVER}|${MA_NAMESPACE}" | sha256sum | cut -d ' ' -f 1)"
printf 'hardwareId: %s\n' "$MA_HARDWARE_ID"
python3 charts/massaccess/files/bootstrap-secrets.py --bundle activation \
--context "$MA_CONTEXT" --expected-server "$API_SERVER" \
--namespace "$MA_NAMESPACE" --acknowledge-namespace "$MA_NAMESPACE"
python3 -c 'import json; from pathlib import Path; m=json.loads(Path("activation/manifest.json").read_text()); print("version:",m["version"]); print("licenseServerUrl:",m["license_server_url"])'Проверка схемы и создаваемых манифестов
Получите текущую палитру из origin подписанного activation manifest; при ошибке остановитесь. Выполните helm lint --strict и helm template для приложения, а при bundled — также для data chart. Immutable image overlay обязателен; overlay палитры передаётся последним только приложению. Просмотрите результат локально: Secret references, image, адреса, ресурсы и NetworkPolicy.
python3 bin/palette-delivery.py --manifest activation/manifest.json --helm work/platform-palette-values.yaml
helm lint charts/massaccess --strict -f work/app-values.yaml -f values/massaccess-images.json -f work/platform-palette-values.yaml
helm template massaccess charts/massaccess -n "$MA_NAMESPACE" -f work/app-values.yaml -f values/massaccess-images.json -f work/platform-palette-values.yaml > work/app-rendered.yaml
# Only when at least one store is bundled:
helm lint charts/massaccess-data --strict -f work/data-values.yaml -f values/massaccess-data-images.json
helm template massaccess-data charts/massaccess-data -n "$MA_NAMESPACE" -f work/data-values.yaml -f values/massaccess-data-images.json > work/data-rendered.yaml