Введение
Управление сложными распределенными системами с использованием Kubernetes может оказаться непростой задачей. Вот тут-то на помощь приходят операторы Kubernetes, автоматизирующие и упрощающие управление кластерами. Но что именно представляют собой эти операторы и почему особенно полезны продвинутые операторы?
Операторы — пользовательские контроллеры, которые расширяют возможности Kubernetes, автоматизируя управление приложениями и обеспечивая бесперебойную работу среды Kubernetes с минимальным ручным вмешательством. Продвинутые операторы могут решать сложные задачи, что делает их незаменимыми для эффективного управления кластерами.
«Шаблон оператора показывает, как можно написать код для автоматизации задачи, выходящей за рамки того, что предоставляет сама платформа Kubernetes. Операторы следуют принципам Kubernetes, в частности системе управления» (Документация Kubernetes).
Поэтому ознакомление с 5 продвинутыми операторами Kubernetes начнем с рассмотрения шаблона оператора и базовых примитивов Kubernetes. Если вы разработчик или платформенный инженер, администратор или пользователь Kubernetes — этот материал будет вам полезен.
Как работают операторы?
Операторы Kubernetes — программные расширения Kubernetes, которые используют пользовательские ресурсы для управления приложениями и их компонентами. Они выступают в роли контроллеров для конкретных приложений, кодируя операционные знания и автоматизируя общие задачи.
Операторы следуют очень важному шаблону Kubernetes — декларативному согласованию состояний (declarative state reconciliation). Он заключается в следующем: контроллеры постоянно следят за тем, чтобы желаемое состояние (desired state), выраженное пользователем, соответствовало фактическому состоянию (actual state), сообщаемому ресурсом. Этот процесс называется согласованием (reconciliation).
Система каждого оператора включает следующие компоненты:
- Пользовательские ресурсы (CR) и пользовательские определения ресурсов (CRD).
- Контроллер, следящий за изменениями в пользовательских ресурсах и соответствующим образом согласовывающий состояние кластера.
- Ресурсы представляют собой желаемое состояние ресурса.
Более подробно об операторах можно прочитать в документации Kubernetes.
Уровни возможностей операторов
Операторы имеют разные уровни сложности. OperatorHub.io классифицирует операторов по пяти уровням возможностей:
- Базовая установка (Basic Install)
- Бесшовные обновления (Seamless Upgrades)
- Полный жизненный цикл (Full Lifecycle)
- Глубокое понимание (Deep Insights)
- Автопилот (Auto Pilot)
По мере перехода от Basic Install к Auto Pilot операторы становятся все более продвинутыми, предлагая все более сложные возможности автоматизации и управления. В этой статье сосредоточимся на продвинутых операторах, находящихся в топовой части этого спектра.
В чем преимущество продвинутых операторов?
Продвинутые операторы (на уровне Full Lifecycle и выше) предлагают расширенные возможности:
- автоматизацию сложных рабочих процессов, специфичных для конкретного приложения;
- внедрение лучших практик масштабируемости и высокой доступности;
- сокращение эксплуатационных расходов и человеческого фактора;
- повышение надежности и производительности системы;
- глубокое понимание и автопилотирование для сложных приложений.
Если вам когда-либо приходилось развертывать и управлять инфраструктурой, особенно в режиме HA (высокой доступности), вы знаете, насколько сложным и подверженным ошибкам может быть этот процесс.
Продвинутый оператор значительно сокращает трудозатраты и сложность управления инфраструктурой. Его можно сравнить с очень способным и при этом узкоспециализированным системным администратором, который никогда не спит и не допускает ошибок.
Поиск и использование операторов
Отличным ресурсом для поиска и использования операторов Kubernetes является OperatorHub.io. В этом репозитории собрано множество операторов всех уровней возможностей, что позволяет выбрать подходящий оператор для ваших нужд.
А теперь погрузимся в работу, чтобы узнать, как эти продвинутые операторы могут улучшить среду Kubernetes!
Диспетчер жизненного цикла операторов
Чтобы упростить процесс установки, будем использовать OLM (Operator Lifecycle Manager — диспетчер жизненного цикла операторов). Приведенная ниже команда установит на кластер последнюю версию OLM.
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.28.0/install.sh | bash -s v0.28.0
OLM упрощает установку, управление и обновление операторов в кластерах Kubernetes. Ключевые преимущества включают:
- автоматические обновления: поддерживает операторов в актуальном состоянии с помощью обновлений «по воздуху» (беспроводным способом);
- управление зависимостями: обеспечивает наличие и совместимость всех необходимых компонентов;
- обнаруживаемость: позволяет легко находить и использовать установленные операторы;
- поддержка стабильности кластера: предотвращает установку конфликтующих операторов;
- удобство интерфейсов: обеспечивает интуитивно понятные элементы управления пользовательским интерфейсом для взаимодействия с операторами.
Использование OLM позволяет эффективно управлять жизненным циклом операторов, обеспечивая стабильную и эффективную работу среды Kubernetes.
С помощью OLM CRD можно устанавливать различные операторы.
Проверьте примеры кода в интерактивной онлайн-среде Kubernetes.
Оператор CloudNativePG
Оператор CloudNativePG упрощает управление PostgreSQL в Kubernetes.
Ключевые преимущества
- Высокая доступность: развертывание многоузловых кластеров PostgreSQL с автоматическим обходом отказа.
- Масштабируемость: беспроблемное увеличение или уменьшение ресурсов PostgreSQL в зависимости от потребностей пользователя.
- Автоматическое резервное копирование: настройка резервного копирования по расписанию и упрощение процесса восстановления.
Примеры использования
- Кластеры PostgreSQL с высокой доступностью.
- База данных как услуга для команд разработчиков.
- Последовательное развертывание баз данных в разных средах.
Установка
Чтобы установить оператор CloudNativePG, проверьте, установлен ли оператор pg, перечислив csvs (ClusterServiceVersions) в пространстве имен по умолчанию:
kubectl get csv
NAME DISPLAY VERSION REPLACES PHASE
cloudnative-pg.v1.23.2 CloudNativePG 1.23.2 cloudnative-pg.v1.23.1 Succeeded
Примеры применения
1. Развертывание базового кластера PostgreSQL
echo "
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pgcluster-sample
spec:
instances: 3
storage:
size: 1Gi
" | kubectl apply -f -
2. Настройка резервного копирования
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pgcluster-with-backup
spec:
instances: 3
storage:
size: 1Gi
backup:
barmanObjectStore:
destinationPath: "s3://my-bucket/backup"
s3Credentials:
accessKeyId:
name: aws-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: aws-creds
key: ACCESS_SECRET_KEY
retentionPolicy: "30d"
Эта конфигурация устанавливает автоматическое резервное копирование в области памяти S3, сохраняя резервные копии в течение 30 дней.
3. Масштабирование кластера
Чтобы масштабировать кластер, просто обновите поле instances
в определении кластера:
echo "
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pgcluster-sample
spec:
instances: 5 # Increased from 3 to 5
storage:
size: 1Gi
" | kubectl apply -f -
Оператор CloudNativePG автоматически справится с процессом масштабирования, добавляя новые экземпляры и реконфигурируя кластер для обеспечения высокой доступности.
Эти примеры иллюстрируют возможности операторов по управлению базами данных SQL в средах Kubernetes. Оператор CloudNativePG, специально разработанный для PostgreSQL, упрощает широкий спектр задач по управлению базами данных. Он обеспечивает бесперебойную работу от базового развертывания до расширенных конфигураций для резервного копирования и масштабирования. Это демонстрирует потенциал использования операторов для баз данных SQL, где PostgreSQL — лишь один из примеров. Сложные операции с базами данных становятся управляемыми и эффективными благодаря использованию операторов, что подчеркивает их ценность в современном администрировании баз данных.
Оператор Jaeger
Оператор Jaeger упрощает развертывание и настройку Jaeger — распределенной системы трассировки с открытым исходным кодом. Посмотрим, как он может помочь специалистам.
Ключевые преимущества
- Распределенное распространение контекста: трассировка запросов по микросервисам для выявления проблем с производительностью.
- Анализ зависимостей сервисов: визуализация зависимостей сервисов для понимания взаимодействий.
- Анализ коренных причин неработоспособности: быстрое выявление первопричин узких мест в производительности.
Случаи использования
- Мониторинг микросервисов.
- Оптимизация производительности.
- Отладка распределенных систем
Установка
Чтобы установить Jaeger Operator, выполните следующие действия:
kubectl apply -f https://operatorhub.io/install/jaeger.yaml
Пример использования
Вот показательный пример развертывания готового к производству экземпляра Jaeger:
kubectl apply -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
spec:
strategy: production
storage:
type: elasticsearch
elasticsearch:
nodeCount: 3
resources:
requests:
cpu: 1
memory: 2Gi
limits:
memory: 2Gi
ingress:
enabled: true
agent:
strategy: DaemonSet
sampling:
options:
default_strategy:
type: probabilistic
param: 0.1
EOF
Этот пример демонстрирует, как операторы упрощают развертывание распределенных решений трассировки в Kubernetes. В частности, оператор Jaeger позволяет развернуть полнофункциональный, готовый к производству экземпляр Jaeger с помощью одного CRD (пользовательского определения ресурса). Таким образом, мы видим возможности оператора по упрощению сложных настроек распределенной трассировки, облегчающие эффективный мониторинг и анализ сред микросервисов. Оператор Jaeger — пример значительного снижения сложности управления инструментами распределенной трассировки в Kubernetes.
Оператор Argo CD
Оператор Argo CD управляет жизненным циклом Argo CD — декларативного GitOps-инструмента непрерывной доставки для Kubernetes.
Ключевые преимущества
- Развертывание GitOps: автоматизация развертывания непосредственно из репозиториев Git.
- Управление жизненным циклом: управление обновлениями, резервным копированием и восстановлением экземпляров Argo CD.
- Мониторинг и аналитика: интегрированный мониторинг с помощью Prometheus и Grafana.
Случаи использования
- Автоматизированные рабочие процессы GitOps.
- Многопользовательское управление Argo CD.
- Масштабируемость и высокая доступность
Установка
Чтобы установить Argo CD Operator, выполните следующие действия:
kubectl apply -f https://operatorhub.io/install/argocd-operator.yaml
Этот код устанавливает Argo CD Operator в пространство имен argocd-operator-system
.
Примеры использования
1. Развертывание базового экземпляра Argo CD
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
name: example-argocd
spec: {}
EOF
2. Настройка резервного копирования для Argo CD
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: ArgoCDExport
metadata:
name: example-argocdexport
spec:
argocd: example-argocd
schedule: "0 * * * *"
storage:
backend: aws
secretName: aws-secrets
EOF
Эти примеры демонстрируют, как операторы улучшают рабочие процессы GitOps в средах Kubernetes. Оператор ArgoCD позволяет развернуть полнофункциональный, готовый к производству экземпляр ArgoCD с помощью всего одного CRD (пользовательского определения ресурса). Это подчеркивает эффективность оператора в упрощении настройки GitOps, благодаря чему осуществляется непрерывное развертывание и контроль версий непосредственно из Git-репозитория. Оператор ArgoCD демонстрирует, как операторы могут упростить и автоматизировать управление инструментами GitOps в Kubernetes, обеспечивая более эффективную и надежную доставку приложений.
Оператор Prometheus
Оператор Prometheus упрощает развертывание и управление экземплярами мониторинга Prometheus.
Ключевые преимущества
- Автоматизированная настройка мониторинга: простое развертывание экземпляров Prometheus для определенных пространств имен, приложений или команд.
- Динамическое обнаружение сервисов: автоматическое создание целей мониторинга на основе меток Kubernetes.
- Мониторинг высокой доступности: развертывание нескольких экземпляров Prometheus в зонах отказа с репликацией данных.
Случаи использования
- Автоматизированная настройка мониторинга.
- Динамическое обнаружение сервисов.
- Высокая доступность и пользовательские оповещения.
Установка
Чтобы установить оператор Prometheus, выполните следующие действия:
kubectl apply -f https://operatorhub.io/install/prometheus.yaml
Этот код устанавливает оператор Prometheus вместе с полным стеком мониторинга, включающим Prometheus, Alertmanager и Grafana в пространстве имен monitoring
.
Примеры использования
1. Развертывание экземпляра Prometheus
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
team: frontend
ruleSelector:
matchLabels:
team: frontend
resources:
requests:
memory: 400Mi
EOF
Это создаст экземпляр Prometheus, который будет мониторить сервисы, помеченные team: frontend
.
2. Настройка мониторинга сервисов
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web
EOF
Этот ServiceMonitor будет обнаруживать и мониторить все сервисы, помеченные как app: example-app
.
3. Создание правил оповещения
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: example-alert
labels:
team: frontend
spec:
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="example-app"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: High request latency for example-app
EOF
Это правило будет вызывать оповещение, когда задержка запроса для example-app
превысит 0,5 секунды в течение 10 минут.
4. Настройка Alertmanager
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: example
spec:
replicas: 3
EOF
Этот код создаст кластер Alertmanager с 3 репликами для обеспечения высокой доступности.
5. Настройка PodMonitor
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: example-pod
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-pod
podMetricsEndpoints:
- port: metrics
EOF
Этот PodMonitor будет обнаруживать и собирать метрики из модулей, помеченных как app: example-pod
.
6. Настройка Thanos для долговременного хранения
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
team: frontend
thanos:
baseImage: quay.io/thanos/thanos
version: v0.22.0
storage:
volumeClaimTemplate:
spec:
storageClassName: standard
resources:
requests:
storage: 100Gi
EOF
Эта конфигурация устанавливает Prometheus со вспомогательным компонентом Thanos для долгосрочного хранения метрик и запросов к нескольким экземплярам Prometheus.
Оператор Prometheus упрощает развертывание системы мониторинга Prometheus в средах Kubernetes, предлагая как простоту, так и расширенную функциональность. Он эффективно справляется с базовыми настройками и поддерживает такие сложные конфигурации, как высокая доступность, настраиваемые оповещения и долгосрочное хранение данных. Автоматизируя сложные задачи мониторинга, оператор позволяет командам сосредоточиться на извлечении ценных сведений из инфраструктуры Kubernetes, значительно снижая операционные издержки.
Оператор Strimzi для Apache Kafka
Оператор Strimzi предоставляет возможность запускать и управлять кластерами Apache Kafka на Kubernetes или OpenShift в различных конфигурациях развертывания.
Ключевые преимущества
- Управление кластером Kafka: развертывание и управление кластерами Kafka с легкостью.
- Платформа потоковой передачи данных: соединение с Kafka Connect для бесшовной интеграции данных.
- Мультикластерная репликация: использование Kafka Mirror Maker для репликации данных на кластерах.
Случаи использования
- Управление кластером Kafka.
- Платформа для потоковой передачи данных.
- Мультикластерная репликация.
Установка
Чтобы установить Strimzi Operator, выполните следующие действия:
kubectl apply -f https://operatorhub.io/install/strimzi-kafka-operator.yaml
Эта команда устанавливает последнюю версию Strimzi Operator в кластер Kubernetes.
Примеры использования
1. Развертывание кластера Kafka
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
version: 3.7.1
replicas: 3
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
config:
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 100Gi
deleteClaim: false
entityOperator:
topicOperator: {}
userOperator: {}
В этом примере кластер Kafka развертывается с 3 брокерами и 3 узлами ZooKeeper, использующими JBOD-хранилище для Kafka.
2. Создание топика (темы) в Kafka
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 10
replicas: 3
config:
retention.ms: 7200000
segment.bytes: 1073741824
Этот код создает топик в Kafka с 10 разделами и 3 репликами.
3. Настройка Kafka Connect
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
name: my-connect-cluster
annotations:
strimzi.io/use-connector-resources: "true"
spec:
version: 3.7.1
replicas: 3
bootstrapServers: my-cluster-kafka-bootstrap:9092
config:
group.id: connect-cluster
offset.storage.topic: connect-cluster-offsets
config.storage.topic: connect-cluster-configs
status.storage.topic: connect-cluster-status
Это развертывание кластера Kafka Connect с 3 репликами.
Приведенные примеры демонстрируют, как операторы оптимизируют распределенные системы обмена сообщениями в средах Kubernetes. Оператор Strimzi эффективно управляет экосистемами Kafka, решая такие задачи, как развертывание кластеров Kafka, настройка репликации данных и включение дополнительных функций, таких как автоматическая ребалансировка. Упрощая эти сложные операции, оператор Strimzi улучшает управление Kafka в облачных нативных средах, что подчеркивает его эффективность в распределенном обмене сообщениями.
Заключительные размышления
Описанный и используемый здесь шаблон — основа декларативного управления ресурсами Kubernetes. Декларируя желаемое состояние ресурсов, мы использовали модель расширения CRD Kubernetes, которая лежит в основе шаблона оператора. Эта модель позволила нам указывать оператору выполнять определенные задачи: резервное копирование, конфигурирование, обновление и т. д. Мы смогли добиться всего этого, используя декларативный подход, сосредоточившись на том, что должно произойти, но не на том, как именно это должно произойти.
Заглядывая в будущее, можно ожидать, что операторы станут еще более совершенными благодаря усилению потенциала ИИ/МО для предиктивного масштабирования и самовосстановления, а также расширению охвата новых технологий и облачных нативных шаблонов. По мере развития экосистемы, вероятно, будет осуществляться и дальнейшая стандартизация практик разработки операторов и API.
Читайте также:
- Результаты тестов сетевых плагинов CNI Kubernetes по сети 40 Гбит/с [2024]
- Итоги 8 лет с Kubernetes в продакшене: два крупных сбоя кластера, отказ от самостоятельного управления, сокращение затрат на кластер, инструментарий и многое другое
- Как написать оператор Kubernetes?
Читайте нас в Telegram, VK и Дзен
Перевод статьи Piotr: 5 Advanced Kubernetes Operators Every DevOps Engineer Should Know About