Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сущности в Kubernetes
В Kubernetes сущности (Entities) или ресурсы/объекты (Resources/Objects) — это абстракции, которые представляют состояние кластера. Они описывают, какое приложение работает, на каких узлах, какую политику сети и хранения использовать, и многое другое. Эти сущности управляются через Kubernetes API Server и описываются в формате YAML или JSON. Их можно разделить на несколько широких категорий.
Основные категории и ключевые сущности
1. Рабочие нагрузки (Workloads)
Они определяют прикладные задачи (поды, контейнеры) и правила их запуска.
- Pod: Наименьшая и самая простая единица. Это группа из одного или нескольких контейнеров с общими сетевыми пространствами имен и хранилищем (volumes). Поды — это "экземпляры" приложения в Kubernetes.
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx:alpine - Deployment: Основная сущность для управления stateless-приложениями. Обеспечивает декларативное обновление, масштабирование и откат набора подов через ReplicaSet.
- ReplicaSet: Гарантирует, что в любой момент времени работает указанное количество идентичных реплик пода. Deployment управляет этим автоматически.
- StatefulSet: Используется для stateful-приложений (базы данных), где важны устойчивые идентификаторы, стабильное сетевое имя и устойчивое хранилище для каждого пода.
- DaemonSet: Гарантирует, что pod запущен на всех (или некоторых) узлах кластера. Используется для системных демонов (логирование, мониторинг).
- Job / CronJob: Job создает один или несколько подов и гарантирует их успешное завершение. CronJob запускает Jobs по расписанию (как cron в Linux).
2. Сетевая абстракция (Network)
Эти сущности управляют тем, как приложения взаимодействуют друг с другом и внешним миром.
- Service: Абстракция, которая определяет логический набор подов и политику доступа к ним. Обеспечивает стабильный IP-адрес (ClusterIP) и DNS-имя, балансировку нагрузки между подами.
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 9376 - Ingress: Управляет внешним доступом к сервисам в кластере, обычно через HTTP/HTTPS. Предоставляет маршрутизацию на основе хостов и путей, SSL-терминирование. Для работы требует Ingress Controller.
- NetworkPolicy: Определяет правила входящего (ingress) и исходящего (egress) сетевого трафика для подов, действуя как брандмауэр уровня подов.
3. Конфигурация и хранение (Configuration & Storage)
Отвечают за конфигурацию приложений и управление данными.
- ConfigMap: Предназначен для хранения неуправляемых конфигурационных данных в формате "ключ-значение". Может быть подключен к подам как переменные окружения или файлы конфигурации.
- Secret: Аналогичен ConfigMap, но предназначен для хранения конфиденциальных данных (пароли, токены, ключи). Данные хранятся в base64-кодировке.
- Volume: Абстракция для предоставления подам возможности читать и записывать данные, которые сохраняются дольше жизненного цикла отдельного пода.
- PersistentVolume (PV) / PersistentVolumeClaim (PVC): Механизм для управления внешним хранилищем. PV — это ресурс хранилища в кластере (например, диск). PVC — это "запрос" пользователя на это хранилище. PVC связывается с подходящим PV.
# Пример PersistentVolumeClaim apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
4. Мета-сущности (Meta)
Они организуют и управляют другими ресурсами.
- Namespace: Виртуальный кластер внутри физического кластера. Позволяет разделять ресурсы между командами, проектами (например,
default,kube-system,prod,dev). - ServiceAccount: Предоставляет идентификационную информацию для подов, которые обращаются к Kubernetes API.
- Role / ClusterRole / RoleBinding / ClusterRoleBinding: Компоненты RBAC (Role-Based Access Control). Определяют, какие действия могут выполнять пользователи или сервисные аккаунты над сущностями в определенных namespace или во всем кластере.
5. Прочие важные сущности
- CustomResourceDefinition (CRD): Позволяет расширять Kubernetes API, создавая свои собственные типы ресурсов. На основе CRD строятся операторы (Operators).
- HorizontalPodAutoscaler (HPA): Автоматически масштабирует количество подов в Deployment, ReplicaSet или StatefulSet на основе наблюдаемой нагрузки (CPU, памяти или кастомных метрик).
- PodDisruptionBudget (PDB): Ограничивает количество добровольных нарушений работы (voluntary disruptions) одновременно, защищая приложение во время операций обслуживания узлов.
- LimitRange / ResourceQuota: LimitRange устанавливает ограничения по ресурсам (CPU/RAM) для подов и контейнеров в рамках namespace. ResourceQuota ограничивает суммарное потребление ресурсов namespace (количество подов, общий объем CPU/RAM и т.д.).
Важность и взаимодействие
Эти сущности образуют декларативную модель, где вы описываете желаемое состояние (в YAML-файлах), а контроллеры Kubernetes постоянно работают, сверяя фактическое состояние с желаемым и приводя их в соответствие. Например, вы создаете Deployment, который декларативно описывает 3 реплики образа my-app:v2. Контроллер Deployment через ReplicaSet создает 3 пода. Service обеспечивает доступ к этим подам, а HPA может масштабировать их количество в зависимости от трафика. Понимание каждой сущности, ее предназначения и взаимосвязей — это основа для эффективной работы с Kubernetes.