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

Какие знаешь объекты в Kubernetes?

1.0 Junior🔥 211 комментариев
#Kubernetes

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

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

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

Основные объекты Kubernetes (API Resources)

Kubernetes оперирует объектами (resources), которые представляют собой записи в базе данных (etcd), описывающие желаемое состояние кластера. Эти объекты создаются, управляются и отслеживаются через Kubernetes API. Вот ключевые категории и объекты, которые я использую в ежедневной работе:

1. Рабочие нагрузки (Workloads)

Объекты для развертывания и управления контейнеризированными приложениями.

  • Pod: Наименьшая и самая простая единица. Контейнер (или несколько тесно связанных контейнеров) с общими сетевыми пространствами и хранилищем. Является эфемерным ("расходным").

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app-pod
    spec:
      containers:
      - name: app
        image: nginx:alpine
        ports:
        - containerPort: 80
    
  • Deployment: Наиболее распространенный контроллер для управления stateless-приложениями. Обеспечивает декларативное обновление, откат и масштабирование набора Pod'ов через ReplicaSet.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.21
    
  • StatefulSet: Для stateful-приложений (БД, очереди), где важны устойчивые идентификаторы, стабильное сетевое имя и постоянное хранилище. Pod'ы создаются и удаляются в строгом порядке.

  • DaemonSet: Гарантирует, что Pod будет запущен на всех (или некоторых) узлах кластера. Идеален для системных сервисов (логирование, мониторинг, сетевые плагины).

  • Job и CronJob: Для задач, которые должны выполняться один раз (Job) или по расписанию (CronJob), и завершиться.

  • ReplicaSet: Обеспечивает работу заданного количества идентичных Pod'ов. Обычно им управляет Deployment, и вручную его создают редко.

2. Сеть и сервисы (Network & Service Discovery)

Объекты для организации сетевого взаимодействия.

  • Service: Абстракция, определяющая логический набор Pod'ов (по селекторам) и политику доступа к ним. Обеспечивает стабильный IP/DNS-имя и балансировку нагрузки.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
      type: ClusterIP # Также бывают: NodePort, LoadBalancer, ExternalName
    
  • Ingress: Управляет внешним HTTP/HTTPS доступом к Service'ам внутри кластера через правила маршрутизации (хосты, пути). Для работы требует Ingress Controller (nginx, traefik).

  • NetworkPolicy: Определяет правила входящего (ingress) и исходящего (egress) трафика для Pod'ов, реализуя "сетевую микросегментацию".

3. Конфигурация и хранение (Configuration & Storage)

Объекты для инжекции конфигурации и данных в приложения.

  • ConfigMap: Хранит конфигурационные данные в формате "ключ-значение" (файлы, переменные), не содержащие чувствительной информации.

  • Secret: Аналогичен ConfigMap, но предназначен для хранения чувствительных данных (пароли, токены, ключи). Данные хранятся в base64-кодировке (не шифрование!).

    apiVersion: v1
    kind: Secret
    metadata:
      name: db-secret
    type: Opaque
    data:
      username: YWRtaW4= # admin
      password: cGFzc3dvcmQ= # password
    
  • Volume: Абстракция для предоставления Pod'ам директории с данными. Существуют различные типы: emptyDir, hostPath, сетевые (NFS, CSI).

  • PersistentVolume (PV) и PersistentVolumeClaim (PVC): Модель управления хранилищем. PV — ресурс в кластере (кусок хранилища), PVC — запрос пользователя на это хранилище. Позволяет отделить детали физического хранения от рабочей нагрузки.

4. Мета-объекты (Meta)

Объекты, которые не описывают сами приложения, а влияют на их поведение.

  • Namespace: Виртуальный кластер внутри физического. Позволяет разделять ресурсы между командами, проектами (логическое группирование).
  • ServiceAccount: Предоставляет удостоверение личности для Pod'ов, чтобы взаимодействовать с Kubernetes API.
  • Role и RoleBinding / ClusterRole и ClusterRoleBinding: Реализуют RBAC (Role-Based Access Control) для управления правами доступа пользователей и ServiceAccount'ов к ресурсам API.

5. Другие важные объекты

  • HorizontalPodAutoscaler (HPA): Автоматически масштабирует количество Pod'ов в Deployment/StatefulSet на основе метрик CPU, памяти или кастомных метрик.
  • PodDisruptionBudget (PDB): Ограничивает количество добровольных нарушений работы (voluntary disruptions) при обслуживании узлов, гарантируя доступность приложения.
  • CustomResourceDefinition (CRD): Расширяет Kubernetes API, позволяя создавать собственные, доменно-специфичные объекты. Основа для операторов (Operators).

На практике взаимодействие с этими объектами происходит через их манифесты в формате YAML (реже JSON) и команды kubectl. Понимание их иерархии, жизненного цикла и взаимосвязей (например, Deployment -> ReplicaSet -> Pod -> Node или PVC -> PV) критически важно для проектирования отказоустойчивых, масштабируемых и безопасных приложений в Kubernetes. Современные практики (GitOps) часто предполагают хранение этих манифестов в Git как "единый источник истины".

Какие знаешь объекты в Kubernetes? | PrepBro