Окружения¶
Hive работает в нескольких Kubernetes-кластерах. Каждый кластер — это окружение со своим Hive API, доменом Knative, ArgoCD и PostgreSQL. Сервис попадает в окружение через стадию CI, которая запускает hive ci --global -E <name> — см. CI/CD.
| Окружение | Вид | Домен Knative | Hive API |
|---|---|---|---|
staging |
staging | knative-staging.svcik.org |
https://api.hive-api.knative-staging.svcik.org |
production |
production | knative.svcik.org |
https://api.hive-api.knative.svcik.org |
envik |
production | knative.envik.org |
https://api.hive-api.knative.envik.org |
Список хранится в cli/environments.yaml в репозитории hive-api. Неизвестное имя в -E — ошибка.
Как выбрать, куда деплоить¶
Добавьте в родительский .gitlab-ci.yml по стадии на каждое окружение. Большинству сервисов нужны staging и production. envik добавляйте, только если сервис должен работать в этом кластере.
URL сервиса строится от домена окружения:
https://{name}.{namespace}.knative-staging.svcik.org # staging
https://{name}.{namespace}.knative.svcik.org # production
https://{name}.{namespace}.knative.envik.org # envik
Как CLI узнаёт окружение¶
hive deploy берёт окружение из HIVE_ENVIRONMENT, которую hive ci -E <name> прописывает в сгенерированные job'ы. Если её нет, CLI сверяет HIVE_DOMAIN, затем HIVE_API_URL с таблицей выше. Если совпадений нет — использует staging и печатает предупреждение. Неизвестное значение HIVE_ENVIRONMENT — фатальная ошибка (код выхода 1).
Несколько продов¶
Каждое окружение — отдельный кластер. Общего у них нет:
- База данных.
storage.database: trueсоздаёт в каждом кластере отдельную пустую базу. Данные не синхронизируются. - Hive-домен, ArgoCD, секреты. У каждого кластера свои.
- customDomains. Плоский список действует во всех продах. Если сервис деплоится и в
production, и вenvik, используйте per-environment форму с разными доменами: один hostname в двух кластерах ломает DNS и TLS. См. Кастомные домены.