Какие сущности для управления Pod в Kubernetes вы знаете?

«Какие сущности для управления Pod в Kubernetes вы знаете?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kubernetes Pod'ами напрямую не управляют. Вместо этого используются контроллеры (Controller objects), которые следят за состоянием Pod'ов и поддерживают его в соответствии с декларативным описанием. Основные сущности:

  1. Deployment: Основной контроллер для stateless-приложений. Управляет жизненным циклом набора идентичных Pod'ов (ReplicaSet'ом), обеспечивая декларативные обновления (rolling update), откаты (rollback) и масштабирование.
  2. StatefulSet: Для stateful-приложений (базы данных, очереди), где важны:
    • Устойчивые, предсказуемые имена Pod'ов (<statefulset-name>-0, -1 и т.д.).
    • Упорядоченный запуск и остановка.
    • Устойчивые тома хранилища (PersistentVolume), привязанные к каждому Pod'у.
  3. DaemonSet: Гарантирует, что Pod будет работать на каждом (или на выбранных) Node в кластере. Используется для системных сервисов: сборщики логов (Fluentd, Filebeat), мониторинг (node-exporter), сетевые плагины (Calico).
  4. Job: Создает один или несколько Pod'ов для выполнения задачи, которая должна завершиться успешно. Управляет повторными попытками при сбое.
  5. CronJob: Запускает Jobs по расписанию, аналогично cron в Linux.

Пример Deployment для веб-приложения:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
      tier: web
  template: # Шаблон для создания Pod'ов
    metadata:
      labels:
        app: frontend
        tier: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.21-alpine
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

Ключевое различие: Deployment управляет ReplicaSet'ом, который, в свою очередь, гарантирует количество Pod'ов. ReplicaSet — низкоуровневый примитив, вручную его используют редко.