Поиск по сайту:

Что такое контроллеры и операторы Kubernetes?


Термины Kubernetes «контроллер» и «оператор» относятся к двум разным шаблонам, которые переводят кластер в желаемое состояние. Контроллеры - это устоявшаяся концепция, тогда как операторы появились совсем недавно для описания контроллеров для конкретных приложений.

Цикл управления

Кластеры Kubernetes функционируют в цикле управления. Вы определяете, что должен делать кластер, записывая и применяя манифесты YAML. Контроллеры внутри кластера обнаруживают запрошенные изменения и предпринимают действия по корректировке состояния. Это происходит асинхронно после отправки новых манифестов.

Контроллеры несут ответственность за мониторинг ресурсов кластера, оценку того, не отклонились ли они от определенного состояния, и внесение любых необходимых корректировок, чтобы привести их в соответствие. Это полностью автоматизированные компоненты, которые работают без вмешательства.

В экосистеме существует несколько видов контроллеров. Некоторые действуют на уровне кластера, тогда как другие управляют вашими рабочими нагрузками. Повседневные ресурсы Kubernetes, которые вы определяете в своих манифестах, могут быть контроллерами: Deployment, ReplicaSet и подобные примеры соответствуют определению контроллера. Они берут на себя ответственность за вложенные объекты, чтобы поддерживать определенное пользователем количество реплик.

Что делает контроллер?

Контроллер — это что-то внутри вашего кластера, которое отслеживает хотя бы один другой тип ресурсов Kubernetes. Контроллеры могут быть пассивными или активными. Активный контроллер сам будет производить необходимые действия; пассивные будут сообщать об изменениях другим компонентам или серверу API кластера.

Поскольку роль контроллера намеренно абстрактна, у них нет общих функций, кроме наблюдения за конкретными объектами. У вас может быть контроллер, который автоматически удаляет модули с аннотацией eligible-for-autodelete.

В Kubernetes контроллеры — это просто шаблон для реализации функций автоматизированного цикла управления. Отдельные контроллеры будут иметь уникальные цели и особенности, но они всегда будут отслеживать объекты или конфигурацию вашего кластера.

Что насчет операторов?

Оператор — это специализированная форма контроллера. Операторы реализуют шаблон контроллера, то есть они переводят кластер в определенное состояние, но они также обладают некоторыми дополнительными характеристиками. Первоначально этот термин был придуман CoreOS, но теперь он более широко принят и Kubernetes.

Операторы предназначены для конкретных приложений. Они добавляют расширения API Kubernetes с помощью пользовательских определений ресурсов, создавая новые типы объектов, которые используются приложением, которым они управляют.

Несколько популярных приложений сообщества теперь поставляются со своими собственными операторами. Это упрощает установку, настройку и обслуживание управляемого программного обеспечения в вашем кластере. Есть операторы для etcd, Fluentd, Prometheus и многих других важных проектов, которые обычно запускаются в кластерах.

Эти рабочие нагрузки могут быть сложными и состоять из нескольких отдельных компонентов. Скорее всего, они включают в себя логику конкретного приложения, которой необходимо управлять на протяжении всего жизненного цикла установки.

Концепция оператора позволяет контролировать эти приложения, используя те же принципы, что и обычные контроллеры. Оператор — это просто специализированный контроллер, который использует настраиваемые ресурсы для перевода определенного приложения в правильное определяемое пользователем состояние.

Обычно вы настраиваете операторы, предоставляя данные конфигурации в пользовательском ресурсе. Оператор использует свои знания о приложении для преобразования этих данных в определенные действия в кластере. Эти действия соберут работающую установку приложения, которая соответствует состоянию, определенному в ресурсе конфигурации.

Для чего используются операторы?

Поскольку операторы зависят от домена, каждый из них будет включать разные функции. Как правило, вы можете ожидать, что оператор предложит некоторые из следующих функций:

  • Автоматический мониторинг и оповещения. Операторы обычно знают, когда их приложения работают неправильно, и генерируют соответствующие оповещения.
  • Автоматическое обновление версий с течением времени. Операторы часто могут автоматически применять изменения кластера для установки новых обновлений приложений по мере их появления. Это значительно снижает нагрузку на команды по обслуживанию.
  • Установка пользовательских ресурсов. Операторы добавят пользовательские ресурсы приложения на сервер API Kubernetes, подготовив кластер для размещения рабочей нагрузки.
  • Автоматическое масштабирование. Оператор со знанием предметной области может распознать, когда количество настроенных реплик слишком мало для комфортного обслуживания текущего трафика, и запустить новые экземпляры для поддержания производительности.
  • Управление жизненным циклом. Операторы обеспечивают запуск новых экземпляров приложений в среде, в которой уже соблюдены все необходимые условия. Они также выполнят любую необходимую очистку после остановки реплики.
  • Управление хранилищем и резервное копирование. Некоторые операторы помогают настроить постоянное хранилище. Поскольку они понимают свое приложение, они также могут создавать резервные копии, прежде чем применять потенциально разрушительные действия.

Сборка всей этой функциональности с нуля перед развертыванием новой рабочей нагрузки была бы сложной и сложной в обслуживании. Операторы позволяют запускать сложные системы в кластере, используя одобренную поставщиком стратегию самоуправления и нативную для Kubernetes.

Преимущества операторов можно ясно увидеть в некоторых приложениях, которые их предлагают. Программное обеспечение для контроля версий GitLab представляет собой сложный стек компонентов, но его оператор обеспечивает полностью автоматизированное автоматическое масштабирование, непрерывное обновление и резервное копирование, а также стек визуализации метрик с использованием Prometheus и Grafana. Все готово к использованию, когда вы добавите оператора в свой кластер.

Другим оператором является MongoDB: он предлагает полностью управляемый способ предоставления хранилища, баз данных, пользователей и настроек Mongo из единого набора определяемых вами спецификаций. Затем оператор настраивает ваш кластер соответствующим образом для поддержки рабочей нагрузки вашей базы данных.

Вы можете написать свои собственные операторы, создав контроллер с помощью одной из клиентских библиотек Kubernetes. Операторы разрабатываются с использованием Kubernetes REST API для запросов и взаимодействия с кластером и его объектами.

Заключение

Контроллеры и операторы — это термины Kubernetes для описания компонентов плоскости управления, которые отслеживают ресурсы и применяют действия для изменения состояния кластера. В то время как контроллеры связаны с операциями на уровне Kubernetes, операторы обладают логикой, специфичной для предметной области, и адаптированы для отдельных приложений.

Если вы используете оператора для установки приложения, это означает, что вы добавляете компонент, который будет следить за этой установкой, проверять ее нормальную работу и автоматизировать переходы состояний для обновлений или изменений конфигурации. Хотя диаграммы Helm уже решили проблему развертывания приложения и его зависимостей, операторы делают еще один шаг вперед: они предоставляются поставщиком приложения, хорошо осведомлены о требованиях рабочей нагрузки и несут ответственность за установку на протяжении всего ее жизненного цикла.

Вполне вероятно, что операторы будут продолжать расти, поскольку им начнут предлагать более сложные приложения с отслеживанием состояния. Автоматизация обслуживания, задач «второго дня» и обновлений помогает снизить нагрузку на перегруженные операционные группы и облегчает новичкам процесс запуска готовых к работе развертываний.