Gymterview
junior

Что такое Namespace и зачем он нужен?

Namespace — механизм виртуального разделения кластера Kubernetes на логически изолированные пространства.

Аналогия из жизни: Namespace — это этаж в офисном здании. На каждом этаже (dev, staging, production) свои кабинеты с одинаковыми номерами, свои правила доступа и свой бюджет, но физически все находятся в одном здании (кластере).

Зачем нужны Namespace

  • Разделение окружений — dev, staging, production в одном кластере
  • Разделение команд — каждая команда работает в своём Namespace
  • Управление ресурсами — можно задать квоты (ResourceQuota) на CPU, память, количество объектов
  • Контроль доступа — RBAC-политики привязываются к Namespace
  • Изоляция имён — объекты в разных Namespace могут иметь одинаковые имена

Стандартные Namespace

Namespace Назначение
default Используется по умолчанию, если Namespace не указан
kube-system Системные компоненты Kubernetes (DNS, Controller Manager и т.д.)
kube-public Доступен всем пользователям, обычно для общей информации
kube-node-lease Для heartbeat’ов нод

Основные команды

Пример
# Создать Namespace
kubectl create namespace dev

# Посмотреть все Namespace
kubectl get namespaces

# Работать в конкретном Namespace
kubectl get pods -n dev
kubectl apply -f deployment.yaml -n dev

# Установить Namespace по умолчанию для текущего контекста
kubectl config set-context --current --namespace=dev

Обращение к сервису в другом Namespace: <service-name>.<namespace>.svc.cluster.local. Например: postgres-service.database.svc.cluster.local.

На собеседовании: интервьюер ожидает знание стандартных Namespace и понимание, зачем разделять окружения. Частая ошибка — не знать DNS-формат для обращения к сервису в другом Namespace.