← Назад к вопросам

Какие знаешь сущности в Kubernetes?

2.0 Middle🔥 171 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сущности в 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.