Какими ресурсами Kubernetes можно создать Pod’ы?

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

Ответ

Непосредственно Pod'ы создаются не только ресурсом Pod, но и, что более важно, контроллерами (workload resources), которые управляют их жизненным циклом. Вот основные ресурсы:

  1. Pod: Базовый ресурс для создания одного пода. Используется редко напрямую в production, так как не обеспечивает самовосстановления.

    apiVersion: v1
    kind: Pod
    metadata:
      name: static-web-pod
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
  2. Deployment: Основной ресурс для stateless-приложений. Управляет ReplicaSet'ом, который, в свою очередь, обеспечивает нужное количество идентичных подов. Предоставляет rolling updates, rollback и масштабирование.

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

  4. DaemonSet: Гарантирует, что Pod будет работать на каждой Node (или на подмножестве по селектору). Идеален для системных демонов (логирование Fluentd, мониторинг Node Exporter).

  5. Job / CronJob: Создают Pod'ы для выполнения разовых задач (Job) или задач по расписанию (CronJob). Pod завершает работу после успешного выполнения задачи.

Вывод: В production Pod'ы почти всегда создаются контроллерами (Deployment, StatefulSet и т.д.), которые добавляют к базовому функционалу Pod'а критически важные возможности: отказоустойчивость, масштабирование и управляемые обновления.