Ответ
Оператор в Kubernetes — это паттерн и метод расширения Kubernetes для автоматизации управления сложными stateful-приложениями или компонентами. По сути, это специализированный контроллер, который следит за пользовательскими ресурсами (Custom Resource Definitions — CRD) и выполняет логику для приведения системы в желаемое состояние, выходящую за рамки встроенных возможностей Kubernetes.
Как это работает:
- Custom Resource Definition (CRD): Определяет новую схему объекта в Kubernetes (например,
PostgresCluster,RedisCluster). - 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.