Что такое оператор (Operator) в Kubernetes?

«Что такое оператор (Operator) в Kubernetes?» — вопрос из категории Kubernetes, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оператор в Kubernetes — это паттерн и метод расширения Kubernetes для автоматизации управления сложными stateful-приложениями или компонентами. По сути, это специализированный контроллер, который следит за пользовательскими ресурсами (Custom Resource Definitions — CRD) и выполняет логику для приведения системы в желаемое состояние, выходящую за рамки встроенных возможностей Kubernetes.

Как это работает:

  1. Custom Resource Definition (CRD): Определяет новую схему объекта в Kubernetes (например, PostgresCluster, RedisCluster).
  2. Custom Controller (Оператор): Программа (часто написанная на Go), которая:
    • Следит за экземплярами CRD через Kubernetes API.
    • Содержит предметно-ориентированные знания (domain knowledge) о том, как развернуть, настроить, обновить, создать резервную копию и восстановить конкретное приложение.
    • Сравнивает фактическое состояние кластера с желаемым, указанным в CR, и выполняет действия для их согласования.

Пример: Упрощённая логика оператора для базы данных. Пользователь создаёт манифест:

apiVersion: postgres.example.com/v1
kind: PostgresCluster
metadata:
  name: my-db
spec:
  replicas: 3
  version: "14"
  storageSize: "100Gi"

Оператор, увидев этот ресурс, автоматически:

  • Создаст StatefulSet с 3 подами PostgreSQL.
  • Настроит репликацию между ними.
  • Развернёт PersistentVolumeClaims для хранения данных.
  • Создаст Service для доступа.
  • При изменении spec.replicas — масштабирует кластер.
  • Может управлять задачами резервного копирования по расписанию.

Популярные примеры и инструменты:

  • Prometheus Operator: Управляет развёртыванием и конфигурацией Prometheus, Alertmanager и связанных ресурсов.
  • Elasticsearch Operator, PostgreSQL Operator: Автоматизируют жизненный цикл соответствующих баз данных в k8s.
  • Инструменты для разработки: Operator SDK и Kubebuilder — фреймворки для создания собственных операторов на Go.

Преимущества: Операторы кодируют операционные знания («как управлять этим приложением») в программный код, что снижает ручной труд, вероятность ошибок и позволяет эффективно управлять stateful-рабочими нагрузками в Kubernetes.