Рубрики
Без рубрики

Dev blog – оператор сельдерея – часть 1 – начальный дизайн

Это первая часть моего блога развития в операторе сельдерея. Вот отказ от ответственности. Эта оперативная … Помечено сельдереем, Куберанес, Питон, иди.

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

Задний план

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

В моей нынешней компании, чтобы отделить нагрузку с веб-сервера, некоторые из задач делегируются на приложение по очереди задач. Это называется сельдереем в Python. Тонн приложений в настоящее время поддерживает сельдерей в качестве поддержки их задач.

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

Вопросы замечены

В мире Kubernetes крупнейшие преимущества Kubernetes имеют масштабирование и наблюдаемость.

Например, для реализации горизонтального автоскалера (HPA) горизонтального POD с различными правилами аффинности и селектора. Высокая доступность и высокая избыточность становится супер легкой задачей для достижения в этой царстве.

Статус объекта также является мощной утилитой, когда мы имеем дело с пользовательским определением ресурсов. Это дает нам удобный способ перечислить статус самого приложений. Если у вас есть справиться с оператором ранее, вы будете знать, что хороший дизайн оператора может дать вам полный обзор в Kubectl Interaction.

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

Например, сельдерей требует ряд ресурсов, чтобы обеспечить полный функционирующий пакет приложений. Брокер, обязательна результата, работник и график. В моей нынешней компании HELM-диаграмма для развертывания стека из сельдерея довольно сложный. Это решает нашу удовольствие от диаграмм.

Наблюдаемость также серьезная проблема в сельдерее. Сельдерей не приходит с трассировкой или функцией мониторинга. Нам нужно развернуть дополнительное приложение, называемое цветком, чтобы показать состояние сельдерея. К сожалению, мои коллеги имели действительно ужасный опыт в цветке … Потреблял множество ресурсов в своем ноутбуке … В любом случае, для того, чтобы предоставить более подробную информацию, нам может потребоваться войти в стручки и выполнить команду Celery. Это представляет серьезную проблему безопасности, потому что вы выделяете разрешение Exec в кластере инженерам. В конце концов, это значительно увеличивает рабочую нагрузку в мою команде при работе с сельдереем.

Последнее, но не менее важное, масштабирование с Кубернетами так страшно для сельдерея. Чтобы масштабировать сельдерей против размера очереди (, конечно, на основе размера очереди, но не встроенный процессор или способ памяти). Нам нужно настроить сельдерей Экспортер и Прометей. И PROMETHEUS превращает метрику в формат метрики Kubernetes-National. Ммм … Когда вы видите это действие, вы знаете, насколько это сложно … Но без масштабирования нам нужно заплатить дополнительные расходы в поддержание этих потенциально неиспользованных экземпляров … Что такое дилемма!

Дизайн оператора

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

Поэтому я решил разработать и развивать свой собственный оператор сельдерея!

У нас есть тонна методов для построения оператора Kubernetes. Как официально поддерживаемый оператор сельдерея, он принимает подход, как метод шаблонов, похожий на Helm и Kustomize. Для моего оператора сельдерея я хочу попробовать что-то другое, оператор SDK с KubeBuilder!

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

Поэтому я в конечном итоге разделил все контроллеры и использую все в один сельдерею CRD для завершения остальных CRD. Результирующая структура похожа на это.

type Celery struct {
  Schedulers []CeleryScheduler
  Broker CeleryBroker
  Workers []CeleryWorker
}

Или используя графику для визуализации соотношения.

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

Под контроллером я изначально выбрал развертывание в качестве способа управления вырочкой POD. Тем не менее, я предвидел, что развертывание, возможно, не является хорошим способом пойти, если я хочу контролировать выросление POD с пользовательскими метриками, как размер очереди.

В конце концов, я изменяю дизайн из развертывания, чтобы POD напрямую. Это действительно жесткое решение, потому что мне нужно было реализовать все проблемы трудностей самостоятельно … Это еще одна история, чтобы пойти …

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

Ref: Сельдерей – Оператор – https://github.com/RyanSiu1995/celery-operator

Оригинал: “https://dev.to/ryansiu1995/dev-blog-celery-operator-part-1-initial-design-3hn2”