BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по DWH » Учебный курс "Использование Kubernetes (k8s) при внедрении BI и DWH" » Модуль 10. Многопользовательность и изоляция

Модуль 10. Многопользовательность и изоляция

Что считаем «хорошей» изоляцией

Многопользовательность = несколько команд данных (или проектов) делят один кластер, не ухудшая SLO друг друга и общих сервисов (Trino/ClickHouse/MinIO/метакаталог). Изоляцию строим слоями:

  1. Орг-уровень: роли и права (RBAC), ответственность (RACI), лимиты по бюджетам.
  2. K8s-уровень: namespaces, ResourceQuota/LimitRange, PriorityClass, NetworkPolicy, PodSecurity.
  3. Вычисления/узлы: отдельные пулы нод, taints/tolerations/affinity; GPU-ноды.
  4. Данные/секреты: S3-бакеты/префиксы и квоты, БД-роли/схемы, жизненный цикл секретов (Vault/ESO).
  5. Сеть и публикация: «внутренний»/«внешний» контур, mTLS/Ingress, IP-allowlist, default-deny.
  6. Наблюдаемость/экономика: SLI/SLO, квоты, showback/chargeback (опционально).

 

Модель tenancy: «мягкая» vs «жёсткая»

  • Мягкая (soft) — общие control plane и data plane, изоляция на уровне k8s-примитивов (Namespaces, NetworkPolicy, Quotas). Подходит большинству BI/DWH.
  • Жёсткая (hard) — отдельные кластеры/пулы узлов и даже отдельные учётки/сети для особо критичных доменов. Дороже, но проще по рискам.

 

Практика: начинать с soft, а для «шумных» или регламентных команд выделять пул нод и ужесточённые политики.

 

Namespaces-на-команду и стандарты

  • По одному namespace на команду/проект: team-a, team-b, team-c. Общие сервисы — в data-platform (Trino, MinIO и т. п.) и vitrines-shared (слой витрин).
  • Лейблы и аннотации обязательны: владелец, контакт on-call, критичность (owner, cost-center, oncall, env).
  • Включить Pod Security (PSA) — profile restricted; шаблоны Gatekeeper/Kyverno, запрещающие: привилегии, hostPath/hostNetwork, неподписанные образы.

 

Ресурсы под контролем: ResourceQuota, LimitRange, PriorityClass

Зачем: чтобы команда не «съела» CPU/RAM/диски соседей и не зафлудила кластер сервисами/секретами.

  • ResourceQuota — потолки по requests/limits.cpu|memory, количеству pods, pvc, services, loadbalancers, суммарному requests.storage, по расширенным ресурсам (например, nvidia.com/gpu).
  • LimitRange — дефолтные requests/limits на Pod/Container, лимиты ephemeral-storage (частая «скрытая» утечка).
  • PriorityClass — кому «уступаем» при дефиците: платформа/витрины выше, экспериментальные Job ниже.

 

Мини-фрагменты (смысловые):

# Пример ResourceQuota (team-a): CPU/RAM, PVC и GPU=0

apiVersion: v1

kind: ResourceQuota

metadata: { name: rq-team-a, namespace: team-a }

spec:

  hard:

    requests.cpu: "40"

    limits.cpu:   "60"

    requests.memory: "120Gi"

    limits.memory:   "180Gi"

    requests.storage: "5Ti"

    persistentvolumeclaims: "40"

    pods: "300"

    requests.nvidia.com/gpu: "0"

---

# Пример LimitRange (team-a): дефолтные requests/limits + ephemeral

apiVersion: v1

kind: LimitRange

metadata: { name: lr-team-a, namespace: team-a }

spec:

  limits:

  - type: Container

    defaultRequest: { cpu: "200m", memory: "512Mi" }

    default:        { cpu: "1",    memory: "2Gi" }

  - type: Pod

    max:

      ephemeral-storage: "20Gi"

 

Сетевая изоляция между зонами (NetworkPolicy)

Базовый принцип — default-deny в каждом ns, затем адресные разрешения:

  • DNS (kube-dns), SSO/IdP, SMTP (если нужно).
  • Обращения только к общему слою витрин (Trino/ClickHouse/PG) и S3/MinIO.
  • Запрет к «чужим» ns и системному API (кроме нужного).

 

Пример (идея, без «простынь»):

# team-a: запрещаем всё; разрешаем egress к DNS, Trino и MinIO

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata: { name: default-deny, namespace: team-a }

spec: { podSelector: {}, policyTypes: ["Ingress","Egress"] }

---

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata: { name: allow-egress-shared, namespace: team-a }

spec:

  podSelector: {}

  policyTypes: ["Egress"]

  egress:

  - to: # DNS

    - namespaceSelector: { matchLabels: { kubernetes.io/metadata.name: kube-system } }

      podSelector: { matchLabels: { k8s-app: kube-dns } }

    ports: [{ protocol: UDP, port: 53 }]

  - to: # Trino в vitrines-shared

    - namespaceSelector: { matchLabels: { name: vitrines-shared } }

      podSelector: { matchLabels: { app: trino } }

    ports: [{ protocol: TCP, port: 8080 }]

  - to: # MinIO

    - namespaceSelector: { matchLabels: { name: data-platform } }

      podSelector: { matchLabels: { app: minio } }

    ports: [{ protocol: TCP, port: 9000 }]

 

Совет: если используете сервис-меш (Linkerd/Cilium mesh), усиливайте правила моделями авторизации L7 (кто к каким маршрутам).

 

Отдельные пулы нод и «тяжёлые» задачи

Зачем: ETL и Spark/Flink, Trino-workers, ClickHouse, Kafka, а также ML-обучение и GPU — требуют изоляции от легковесных веб-слоёв.

  • Размечаем node pools лейблами: pool=stateless, pool=stateful, pool=etl, pool=gpu.
  • На «узких» пулах ставим taints: например, kubectl taint nodes node-etl pool=etl:NoSchedule и добавляем tolerations только на нужные workload’ы.
  • Affinity/anti-affinity: разводим реплики по разным узлам/зонам, не кладём всё «тяжёлое» вместе.

 

GPU-ноды для ML

Компоненты: NVIDIA Device Plugin, (по необходимости) GPU Operator, драйверы. Политики:

  • Квоты на GPU через ResourceQuota (requests.nvidia.com/gpu), где кому-то 0 (запрет), кому-то 2 и т. п.
  • Доступ только нужным ns: taints/tolerations + nodeSelector pool=gpu.
  • MIG/тайм-шаринг (если карточки поддерживают): дробим на профили, чтобы не простаивали.
  • Хранилище/сеть: быстрые локальные диски для датасетов/кэшей, egress-политики к артефакт-сторам.

 

Мини-смысл:

# team-c можно до 2 GPU, team-a/team-b — 0 (см. квоты выше)

spec.hard.requests.nvidia.com/gpu: "2"

 

В Pod ML-задачи запрашивают resources.limits."nvidia.com/gpu": 1 + nodeSelector: { pool: "gpu" }.

 

Жизненный цикл секретов

Дизайн: секреты хранятся вне кластера (Vault/Secret Manager), в k8s — только синхронизация External Secrets Operator. Правила:

  • Пространства секретов по ns: kv/team-a/*, kv/team-b/*. Права — только на свой путь.
  • Краткоживущие креды (dynamic creds) для БД/объектного хранилища; перезапуск подов при ротации.
  • SA-токены: automountServiceAccountToken: false, проецируемые токены с TTL и узкой аудиторией.
  • ImagePullSecrets и политика образов (подписи cosign + валидация Kyverno).

 

Общий слой витрин (shared layer) без взаимных помех

Цель — чтобы все пользователи BI ходили в одно место, а команды публиковали туда только согласованные данные.

Опорные решения:

  • Trino (каталоги iceberg|clickhouse|postgres) — единая точка чтения.
  • «Витрины-как-код» (dbt exposures) и «контракты» на схемы (expand/contract; см. Модуль 6 и 7).
  • Схемы/БД по доменам: marts.sales, marts.marketing, marts.finance; роли read-only для BI, write — только у конвейеров владельца домена.
  • S3-слой: бакеты/префиксы per team (s3://teams/team-a/*) + s3://vitrines/*; квоты на бакеты (MinIO bucket quota), lifecycle/версионирование.
  • Доступы: NetworkPolicy/Ingress → Trino/PG/CH из командных ns; BI/пользователи — только в vitrines-shared.

 

Гранты (концептуально):

  • роль marts_reader (BI) — SELECT на marts.*;
  • роль sales_owner — INSERT/UPDATE/DDL в marts.sales.*;
  • публикация — только через пайплайн (GitOps), не руками.

 

Наблюдаемость и экономия

  • По ns/командам собираем: CPU/Memory/Pods/PVC/IOPS, egress/ingress трафик, количество объектов (Secrets/ConfigMaps), S3-объём.
  • SLO per команда: «окна ETL», «свежесть витрин», «ошибки коннекторов» — см. Модуль 5.
  • Showback/chargeback (при необходимости): Opencost/Kubecost, лейблы/аннотации — в отчёты.

 

Практика: изолировать 3 команды и организовать общий слой витрин

Цель

Создать три рабочие зоны (team-a, team-b, team-c), дать каждой ресурсы и сеть по минимуму, включить секреты и доступ только к общему слою витрин (vitrines-shared), выделить тяжёлые/ML задачи, не нарушая SLO платформы.

 

Шаги (краткий план)

  1. Namespaces: team-a, team-b, team-c, vitrines-shared, data-platform.
    • Метки владельцев, PSA=restricted.
  2. Quotas/LimitRanges на каждый ns: CPU/RAM/PVC/Pods; у team-c — GPU≤2, у остальных — 0.
  3. PriorityClass: platform-high (Trino/каталоги), teams-normal, experiments-low.
  4. Node pools: pool=stateless, pool=etl, pool=stateful, pool=gpu; taints на etl и gpu.
  5. NetworkPolicy: default-deny; egress каждой команды → DNS, SSO, vitrines-shared/Trino, data-platform/MinIO; запрет cross-ns.
  6. Secrets: ESO + Vault с путями kv/team-*/...; SA-токены с TTL.
  7. Trino/PG/CH в vitrines-shared: роли marts_reader (BI) и владельцы доменов; BI-Ingress только к этому ns.
  8. S3: бакеты teams/team-a, teams/team-b, teams/team-c, vitrines; квоты и lifecycle.
  9. GPU: NVIDIA plugin, квоты на GPU; taints/tolerations; team-c — единственный с доступом.
  10. Наблюдаемость: дашборд «per-team» (ресурсы, ошибки, свежесть), алерты на burn-rate и превышение квот.

 

Результат

  • Команды запускают пайплайны в своих ns, видят только общие витрины и S3, не могут «ходить» в чужие зоны.
  • Платформа/витрины работают приоритетно; тяжёлые/ML задачи не мешают веб-слоям и БД.
  • Секреты и доступы управляются «как код», всё прозрачно по потреблению.

 

Риски и как их закрыть

Риск

Симптом

Что сделать

Noisy neighbor (шумный сосед)

Всплески latency у BI/витрин

Жёсткие LimitRange, Quota; отдельные пулы, PDB/TopologySpread; PriorityClass

«Съели» соединения БД/Trino

503/timeout, блокировки

PgBouncer/лимиты Trino/CH; connection budget на HPA/KEDA; квоты на pods

Egress «пробит» наружу

Доступ из команд в Интернет

Default-deny, явные разрешения; egress-контроль по IP/FQDN (Cilium/Calico L7)

Секреты утекли в Git

base64 в манифестах

ESO+Vault; SOPS/SealedSecrets для статичных; сканеры секретов в CI

GPU «захватили» все

ML-задачи блокируют очередь

Quota на GPU, taints/tolerations, preemption по PriorityClass, планировщик заданий

Эфемерное хранилище переполнили

Pod OOM по ephemeral-storage

LimitRange на ephemeral, лог-ротация, Sidecar для выгрузки логов

«Случайно» доступ к чужим данным

Просмотры «не своих» витрин

Роли read-only только на marts; запрет прямых коннектов к staging/raw; NetworkPolicy

 

Короткий чек-лист «готово к многопользовательскому продакшену»

  • Namespaces на команды, лейблы/PSA, Gatekeeper/Kyverno политики.
  • ResourceQuota и LimitRange (включая ephemeral-storage), приоритеты.
  • Node pools и taints; тяжёлые/ML — изолированы; квоты на GPU.
  • NetworkPolicy: default-deny везде; разрешения — только к DNS/IdP/вitrines/MinIO/SMTP.
  • Secrets через ESO/Vault; токены краткоживущие; image-policies и подписи.
  • Общий слой витрин (vitrines-shared): роли/гранты, BI ходит только туда; S3-квоты/жизненный цикл.
  • Дашборды per-team и алерты: ресурсы, свежесть, ошибки коннекторов, превышение квот.
  • Runbooks: «превышена квота», «GPU заняты», «подозрительный egress», «секрет пора ротировать».

 

Multi-tenant-кластер для BI/DWH — это не «про один флажок». Это совокупность дисциплин: namespaces с политиками, квоты и лимиты, отдельные пулы и приоритеты, строгие NetworkPolicy, управляемые секреты и общий слой витрин с чёткими ролями. Если всё это оформлено «как код» и подкреплено наблюдаемостью, команды работают параллельно, быстро и — главное — безопасно друг для друга и для бизнеса.

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
Модуль 9. Российские решения: варианты развертывания и интеграции
Следующая статья →
Модуль 11. Надёжность и масштабирование

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • ГК «Агропромкомплектация-Курск» - одна из ведущих в Российской Федерации агропромышленных компаний с полным производственным циклом "от поля до прилавка". За 32 года работы на рынке компания заслуженно завоевала репутацию одного из лидеров страны в производстве свинины и молока.

  • В «Пивоваренной компании «Балтика» аналитическая платформа Loginom применяется для моделирования процессов или построения отчетов, в том числе для формирования рекомендаций по корректировке плана промоактивностей.
     
  •  ООО «ММК-Информсервис» создает высокотехнологичные решения для эффективной работы предприятий. Разрабатывают и внедряют телекоммуникационные и бизнес-приложения, автоматизируют производство, выстраивают и поддерживают корпоративную IT-инфраструктуру.

  • Ситилинк

    Электронный дискаунтер «Ситилинк» — один из крупнейших онлайн‑ритейлеров России (3‑е место по объему онлайн‑продаж в рейтинге Data Insight и Ruward 2016 года E‑commerce Index TOP‑100, 8 место в рейтинге Forbes «20 самых дорогих компаний Рунета — 2017»). На рынке работает 9 лет.

    В ассортименте дискаунтера более 50 000 наименований компьютерной цифровой, бытовой и садовой техники, офисной мебели и других товарных категорий. Более 700 мировых брендов в портфеле. Около 4 000 сотрудников по всей России

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.