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.