Пространства имен (namespaces) в Kubernetes

Kubernetes поддерживает несколько виртуальных кластеров, поддерживаемых одним физическим кластером. Эти виртуальные кластеры называются пространствами имен.

Когда использовать несколько пространств имен

Пространства имен предназначены для использования в средах с множеством пользователей, распределенных по нескольким командам или проектам. Для кластеров с несколькими десятками пользователей вам вообще не нужно создавать или думать о пространствах имен. Начните использовать пространства имен, когда вам понадобятся функции, которые они предоставляют.

Пространства имен обеспечивают область для имен. Имена ресурсов должны быть уникальными в пространстве имен, но не во всех пространствах имен. Пространства имен не могут быть вложены друг в друга, и каждый ресурс Kubernetes может находиться только в одном пространстве имен.

Пространства имен - это способ разделения ресурсов кластера между несколькими пользователями (через квоту ресурсов).

В будущих версиях Kubernetes объекты в одном и том же пространстве имен будут иметь одинаковые политики контроля доступа по умолчанию.

Нет необходимости использовать несколько пространств имен только для того, чтобы разделить немного разные ресурсы, такие как разные версии одного и того же программного обеспечения: используйте метки (labels), чтобы различать ресурсы в одном и том же пространстве имен.

Работа с пространствами имен

Просмотр пространств имен

Вы можете перечислить текущие пространства имен в кластере, используя:

kubectl get namespace

NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d

Kubernetes стартует с трех начальных пространств имен:

  • default - пространство имен по умолчанию для объектов без другого пространства имен.
  • kube-system - пространство имен для объектов, созданных системой Kubernetes
  • kube-public - это пространство имен создается автоматически и доступно для чтения всем пользователям (включая тех, кто не прошел проверку подлинности). Это пространство имен в основном зарезервировано для использования кластером, в случае если некоторые ресурсы должны быть видимыми и доступными для чтения во всем кластере. Открытый аспект этого пространства имен - это всего лишь соглашение, а не требование.

Настройка пространства имен для запроса

Чтобы установить пространство имен для текущего запроса, используйте флаг --namespace.

Например:

kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>
kubectl get pods --namespace=<insert-namespace-name-here>

Установка настроек пространства имен

Вы можете надолго сохранить пространство имен для всех последующих команд kubectl в этом контексте.

kubectl config set-context --current --namespace=<insert-namespace-name-here>
# Проверяем
kubectl config view | grep namespace:

Пространства имен и DNS

Когда вы создаете Service (Службу), она создает соответствующую запись DNS. Эта запись имеет вид <service-name>.<namespace-name>.svc.cluster.local, что означает, что если контейнер просто использует <service-name>, он преобразуется в службу, локальную для пространства имен. Это полезно для использования одной и той же конфигурации в нескольких пространствах имен, таких как разработка, подготовка и производство (Development, Staging, Production). Если вы хотите охватить пространства имен, вам нужно использовать полное доменное имя (FQDN).

Не все объекты находятся в пространстве имен

Большинство ресурсов Kubernetes (например, модули (pods), службы (services), контроллеры репликации (replication controllers) и другие) находятся в некоторых пространствах имен. Однако ресурсы пространства имен сами по себе не находятся в пространстве имен. А низкоуровневые ресурсы, такие как узлы (nodes) и persistentVolumes, не находятся ни в одном пространстве имен.

Чтобы увидеть, какие ресурсы Kubernetes есть и нет в пространстве имен:

# В пространстве имен
kubectl api-resources --namespaced=true

# Не в пространстве имен
kubectl api-resources --namespaced=false


Читайте также:


Комментарии

Популярные сообщения из этого блога

Контроллеры в Kubernetes: DaemonSet

Контроллеры в Kubernetes: ReplicaSet

Контроллеры в Kubernetes: StatefulSet