Установка и проверка Kubernetes

Безопасная установка выпусков данных и приложения, повторный запуск, прикладная проверка и организация внешнего доступа.

Краткий словарь
  • Установка Helm (Helm release) — установленный и независимо управляемый набор ресурсов одного чарта.
  • Объект Secret — ресурс Kubernetes для ссылок на конфиденциальные значения; поставочные чарты не владеют самими значениями.
  • Запрос постоянного тома (PersistentVolumeClaim, PVC) — запрос хранилища для встроенного компонента данных.
  • Сетевая политика (NetworkPolicy) — правила допустимых сетевых соединений модулей приложения.
  • Интерфейс хранения контейнеров (Container Storage Interface, CSI) и сетевой интерфейс контейнеров (Container Network Interface, CNI) предоставляются кластером заказчика.

Установка Helm releases

Выполняйте команды из корня материалов после проверки values, активации и Secret. MA_CONTEXT, MA_NAMESPACE и API_SERVER задаются на странице требований. Команды меняют только выбранный кластер и namespace.

  1. Проверьте Kubernetes, права и namespace. Создайте namespace только если он отсутствует; не используйте системные namespace. При существующих releases massaccess/massaccess-data команды upgrade --install обновят их.
  2. Проверьте SHA256SUMS, подготовьте local values и Secret хранилищ, выполните план активации. Для bundled выполните storage preflight: --run создаёт и удаляет пробные PVC/Pod; при Retain проверьте оставшиеся PV. После PASS внесите digest и verified: true в storagePreflight; enforcementVerified выставляйте только после реальной проверки CNI.
  3. Получите свежую палитру и выполните lint/template. Примените активацию с --apply, затем установите massaccess-data только при наличии bundled и дождитесь готовности.
  4. Установите massaccess, выполните helm test, проверьте Pod, Jobs и PVC. При ошибке остановитесь и изучите события; не удаляйте диски и не пересоздавайте идентичность.
  5. Создайте первого администратора командой ниже: ожидается PASS admin.bootstrap action=created; повтор с теми же данными сохраняет аккаунт (action=preserved). Сохраните пароль в защищённом хранилище.
bash
python3 charts/massaccess/files/bootstrap-secrets.py --bundle activation \
  --context "$MA_CONTEXT" --expected-server "$API_SERVER" \
  --namespace "$MA_NAMESPACE" --acknowledge-namespace "$MA_NAMESPACE" --apply
# Only when at least one store is bundled:
helm --kube-context "$MA_CONTEXT" upgrade --install massaccess-data charts/massaccess-data -n "$MA_NAMESPACE" \
  -f work/data-values.yaml -f values/massaccess-data-images.json --rollback-on-failure --wait --timeout 15m
# Application, after data services are ready:
helm --kube-context "$MA_CONTEXT" upgrade --install massaccess charts/massaccess -n "$MA_NAMESPACE" \
  -f work/app-values.yaml -f values/massaccess-images.json -f work/platform-palette-values.yaml --rollback-on-failure --wait --timeout 15m
helm --kube-context "$MA_CONTEXT" status massaccess -n "$MA_NAMESPACE"
helm --kube-context "$MA_CONTEXT" test massaccess -n "$MA_NAMESPACE" --logs
kubectl --context "$MA_CONTEXT" -n "$MA_NAMESPACE" get deployment,statefulset,pod,service,job,pvc

Активация, Secret и первый администратор

bash
MA_ADMIN_EMAIL='<адрес-администратора>'
MA_COMPANY_NAME='<название-компании>'
export MA_ADMIN_EMAIL MA_COMPANY_NAME
python3 - <<'PYCODE'
import getpass, json, os, subprocess
password = getpass.getpass('Пароль первого администратора: ')
if not password:
    raise SystemExit('Пароль не может быть пустым')
payload = json.dumps({
    'email': os.environ['MA_ADMIN_EMAIL'],
    'password': password,
    'company_name': os.environ['MA_COMPANY_NAME'],
})
subprocess.run([
    'kubectl', '--context', os.environ['MA_CONTEXT'],
    '-n', os.environ['MA_NAMESPACE'],
    'exec', '-i', 'deploy/core', '-c', 'core', '--',
    'python', '-m', 'core.bootstrap_onprem_admin',
], input=payload, text=True, check=True)
PYCODE

Проверка после установки

STATUS: deployed и успешный Helm test обязательны. Затем проверьте готовность Pod, Jobs миграций, созданные Secret по именам, вход первого администратора, heartbeat лицензии и контрольные операции приложения. Готовность Pod сама по себе не доказывает доставку сообщений.

  • Проверьте Pod Ready, завершение Jobs и Bound у PVC, число перезапусков и отсутствие OOMKilled.
  • Проверьте вход в панель, API/WebSocket, чтение и запись данных; отправку сообщений проверяйте до конечного статуса, а не только HTTP 202.
  • Сохраните версию, image digests, local values и результаты проверок в защищённом месте.

Публикация на хосте установки и внешний доступ

Публичные HTTP/WebSocket URL, DNS, Ingress/Gateway и TLS подготавливает ваша команда в local values и инфраструктуре. Для локальной проверки можно открыть frontend через port-forward; это не проверяет внешний маршрут.

  • Для port-forward используйте отдельный терминал с теми же MA_CONTEXT и MA_NAMESPACE; откройте http://127.0.0.1:3001/web/login.
  • Отдельно проверьте UI, API и WebSocket через фактический внешний адрес, сертификаты и сетевые политики.
bash
kubectl --context "$MA_CONTEXT" -n "$MA_NAMESPACE" port-forward --address 127.0.0.1 svc/frontend 3001:3000