Что такое Namespace в Kubernetes?

«Что такое Namespace в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Namespace (пространство имён) в Kubernetes — это виртуальный кластер внутри физического кластера. Это механизм для изоляции групп ресурсов (подов, сервисов, ConfigMaps, Secrets) в рамках одного кластера.

Основные цели использования:

  • Логическое разделение: Изоляция окружений (dev, staging, prod), команд или проектов.
  • Управление доступом: Привязка политик RBAC (Role-Based Access Control) к конкретному пространству имён.
  • Квотирование ресурсов: Ограничение потребления CPU, памяти и количества объектов через ResourceQuota.
  • Изоляция сети: Применение NetworkPolicy для управления сетевым трафиком между подами в разных неймспейсах.

Пример манифеста для создания Namespace:

apiVersion: v1
kind: Namespace
metadata:
  name: production

Важные особенности:

  • Системные неймспейсы, такие как kube-system, kube-public, kube-node-lease, создаются и управляются самим Kubernetes.
  • Ресурсы уровня кластера (Nodes, PersistentVolumes, ClusterRoles) не принадлежат ни одному неймспейсу и являются глобальными.
  • Имена ресурсов (например, Pod или Service) должны быть уникальны только в пределах одного неймспейса.

Работа с неймспейсами через kubectl:

# Создать неймспейс
kubectl create namespace dev

# Показать все ресурсы в конкретном неймспейсе
kubectl get all -n dev

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