namespaces
Пространства имен (Namespaces) в Kubernetes представляют собой способ разделения ресурсов кластера на виртуальные группы. Они используются для создания изолированных областей внутри кластера, где могут находиться ресурсы, такие как поды, сервисы, хранилища и другие объекты.
Вот некоторые основные аспекты и применения пространств имен в Kubernetes:
- Изоляция ресурсов: Пространства имен позволяют изолировать ресурсы внутри кластера. Это помогает предотвратить конфликты и нежелательное взаимодействие между различными приложениями и сервисами.
- Управление доступом и безопасность: Каждое пространство имен имеет свои собственные настройки безопасности и политики доступа, что позволяет ограничивать доступ к ресурсам в соответствии с требованиями безопасности.
- Организация и структурирование: Пространства имен могут быть использованы для логической организации ресурсов в кластере по проектам, командам или приложениям. Это облегчает управление и мониторинг ресурсов.
- Разграничение сред: Пространства имен позволяют создавать отдельные среды для разработки, тестирования и производства, что способствует изоляции и управлению конфигурациями и версиями приложений.
- Масштабирование: Использование пространств имен позволяет масштабировать кластер Kubernetes, размещая ресурсы в различных пространствах имен и управляя ими независимо друг от друга.
Сервисы в Kubernetes по умолчанию доступны из разных пространств имен (namespaces) из-за того, как работает механизм DNS в Kubernetes.
По умолчанию, в Kubernetes используется механизм DNS для разрешения имен служб в IP-адреса. Когда вы создаете службу, Kubernetes создает запись DNS для этой службы во всех пространствах имен. Это означает, что любой под в любом пространстве имен может обращаться к службе по ее имени, и механизм DNS автоматически разрешит это имя в правильный IP-адрес службы, независимо от того, в каком пространстве имен оно находится.
Пространства имен могут быть созданы, удалены, просмотрены и изменены с помощью утилиты kubectl. Они предоставляются по умолчанию при установке Kubernetes и широко используются для организации и управления ресурсами в кластере.
# Создание пространства имен:
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, память и количество объектов, в пределах определенного пространства имен.
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 с указанием нужного пространства имен.