Skip to content

namespaces

Пространства имен (Namespaces) в Kubernetes представляют собой способ разделения ресурсов кластера на виртуальные группы. Они используются для создания изолированных областей внутри кластера, где могут находиться ресурсы, такие как поды, сервисы, хранилища и другие объекты.

Вот некоторые основные аспекты и применения пространств имен в Kubernetes:

  • Изоляция ресурсов: Пространства имен позволяют изолировать ресурсы внутри кластера. Это помогает предотвратить конфликты и нежелательное взаимодействие между различными приложениями и сервисами.
  • Управление доступом и безопасность: Каждое пространство имен имеет свои собственные настройки безопасности и политики доступа, что позволяет ограничивать доступ к ресурсам в соответствии с требованиями безопасности.
  • Организация и структурирование: Пространства имен могут быть использованы для логической организации ресурсов в кластере по проектам, командам или приложениям. Это облегчает управление и мониторинг ресурсов.
  • Разграничение сред: Пространства имен позволяют создавать отдельные среды для разработки, тестирования и производства, что способствует изоляции и управлению конфигурациями и версиями приложений.
  • Масштабирование: Использование пространств имен позволяет масштабировать кластер Kubernetes, размещая ресурсы в различных пространствах имен и управляя ими независимо друг от друга.

Сервисы в Kubernetes по умолчанию доступны из разных пространств имен (namespaces) из-за того, как работает механизм DNS в Kubernetes.

По умолчанию, в Kubernetes используется механизм DNS для разрешения имен служб в IP-адреса. Когда вы создаете службу, Kubernetes создает запись DNS для этой службы во всех пространствах имен. Это означает, что любой под в любом пространстве имен может обращаться к службе по ее имени, и механизм DNS автоматически разрешит это имя в правильный IP-адрес службы, независимо от того, в каком пространстве имен оно находится.

Пространства имен могут быть созданы, удалены, просмотрены и изменены с помощью утилиты kubectl. Они предоставляются по умолчанию при установке Kubernetes и широко используются для организации и управления ресурсами в кластере.

namespaces
# Создание пространства имен:
kubectl create namespace <namespace_name>

# Просмотр списка пространств имен:
kubectl get namespaces

# Просмотр подробной информации о пространстве имен:
kubectl describe namespace <namespace_name>

# Удаление пространства имен:
kubectl delete namespace <namespace_name>

# Узнать текущее пространство имен:
kubectl config view | grep namespace 

# Переключение контекста на конкретное пространство имен:
kubectl config set-context --current --namespace=<namespace_name>

# Применение манифеста для объектов в конкретном пространстве имен:
kubectl apply -f <manifest_file> --namespace=<namespace_name>

# Просмотр ресурсов в конкретном пространстве имен:
kubectl get pods -n <namespace_name>

# Использование префикса -n или --namespace: Во многих командах kubectl можно использовать флаг -n или --namespace для указания конкретного пространства имен.
kubectl get pods -n <namespace_name>

Использование пространств имен (namespaces) становится все более важным по мере роста количества управляемых приложений в вашем кластере. Пространства имен облегчают организацию приложений в группы, что упрощает понимание, например, группы мониторинга и группы безопасности.

Пространства имен также могут быть полезны для управления средами Blue/Green, где каждое пространство имен может содержать разные версии приложения и совместно использовать ресурсы, доступные в других пространствах имен, таких как логирование, мониторинг и т. д.

Еще один сценарий использования пространств имен - это один кластер, много команд. Когда несколько команд используют один и тот же кластер, они могут пересекаться друг с другом. Например, если они создают приложение с одним и тем же именем, это может привести к замещению приложения одной команды приложением другой команды, так как в Kubernetes нельзя иметь два приложения с одинаковым именем в одном пространстве имен.

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

При создании кластера Kubernetes по умолчанию существуют следующие особые пространства имен:

  • default (по умолчанию): Все объекты, которые не имеют явно указанного пространства имен, создаются в пространстве имен default. Это основное пространство имен для большинства приложений и сервисов.
  • kube-system (системное): Пространство имен kube-system содержит системные компоненты Kubernetes, такие как kube-dns, kube-proxy, и другие контроллеры и демоны, которые управляют кластером.
  • kube-public (публичное): Пространство имен kube-public содержит ресурсы, которые должны быть доступны для всех пользователей и приложений в кластере. Это может включать в себя конфигурационные карты (ConfigMaps) и секреты (Secrets), которые необходимы для доступа к кластеру изнутри и извне.
  • kube-node-lease (контракт аренды узла Kubernetes) используется для отслеживания аренды узлов кластера Kubernetes. В нем хранится информация о том, какие узлы арендованы для выполнения задач и сколько времени они арендованы. Когда узел подключается к кластеру, он создает аренду в пространстве имен kube-node-lease, которая автоматически продлевается по мере необходимости. Это позволяет кластеру отслеживать доступность узлов и автоматически реагировать на их отказы или недоступность. Пространство имен kube-node-lease является важной частью механизма обнаружения и управления узлами в кластере Kubernetes, и его содержимое обычно не требует прямого взаимодействия или изменения со стороны пользователя.

kube-system

Пространство имен kube-system в Kubernetes предназначено для хранения системных компонентов и сервисов, которые управляют самим кластером. В нем содержатся различные контроллеры, демоны и другие компоненты, обеспечивающие работу и управление самой платформой Kubernetes.

  • kube-apiserver: Основной API-сервер Kubernetes, который предоставляет интерфейс для управления кластером через Kubernetes API.
  • kube-controller-manager: Контроллеры, отвечающие за поддержание желаемого состояния кластера, такие как ReplicaSet, Deployment, StatefulSet и другие.
  • kube-scheduler: Компонент, отвечающий за распределение запущенных подов по доступным узлам в кластере.
  • kubelet: Агент, устанавливаемый на каждом узле кластера для управления и мониторинга запущенных подов на этом узле.
  • kube-proxy: Сетевой прокси, обеспечивающий сетевую связь между различными сервисами и подами в кластере.
  • kube-dns/coredns: Сервис DNS, обеспечивающий разрешение имен и обслуживание DNS-запросов в кластере.

ResourceQuota

ResourceQuota. Ресурсная квота позволяет вам устанавливать ограничения на количество и использование ресурсов, таких как CPU, память и количество объектов, в пределах определенного пространства имен.

ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: your-namespace
spec:
  hard:
    pods: "10"
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi

Создание компонентов

Для создания компонентов (например, подов, служб и т. д.) в конкретном пространстве имен (namespace) в Kubernetes вы можете использовать специальные манифесты или команды kubectl с указанием нужного пространства имен.

ключ --namespace
# Определяем пространство имен с помощью kubectl
kubectl create deployment my-deployment --image=nginx --namespace=my-namespace
Определяем пространство имен в манифесте
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace
spec:
  containers:
  - name: my-container
    image: nginx