Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JUGNsk Meetup #18. Михаил Папин и Руслан Зайнутдинов - Всему своё место, или как написать k8s оператор на Java

JUGNsk Meetup #18. Михаил Папин и Руслан Зайнутдинов - Всему своё место, или как написать k8s оператор на Java

Докладчики: Михаил Папин и Руслан Зайнутдинов, Backend-инженеры, R&D центр, ЦФТ

Расскажем, как, зачем и почему мы на написали k8s оператор для сущностей Kafka на Java, используя Quarkus Framework, и запустили его, используя сборку в native.

Покажем, какие грабли собрали в пути, и поделимся своими впечатлениями от данного подхода.

jugnsk

June 27, 2021
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Позвольте представиться 2 Папин Михаил Компания ЦФТ Центр исследований и

    разработок Tg: @i4exz Зайнутдинов Руслан Компания ЦФТ Центр исследований и разработок Tg: @beelzzebub
  2. О чем доклад? Если кратко: K8s + operator + прикладная

    задача + Java + Quarkus Framework + GraalVM native image = Prod Если подробнее: Расскажем (и покажем) из чего состоит и для чего может использоваться k8s оператор и как его написать самостоятельно используя Java. 3
  3. Мы не будем детально рассказывать про то: • Как работает

    Apache Kafka (присутствует исключительно в контексте решаемой задачи). • Что такое и как устроен k8s. Что почитать, посмотреть? • Официальная документация. • Недавняя статья на хабре от Southbridge https://habr.com/ru/company/southbridge/blog/556860/ • Twitter: @gAmUssA (Viktor Gamov) 4
  4. С чего всё началось? Дано: 1. Kafka как шина данных.

    2. Клиенты (банки) при подключении к сервису получают свой логин, пароль и пишут в свои персональные топики. Требуется: 1. Автоматизировать процесс подключения. 2. Сделать артефакты подключения удобными для обслуживания. 5
  5. K8S Custom resources • Особый ресурс (мета-ресурс) Custom-resource-definition (далее crd)

    Довольно известный пример: ServiceMonitor – custom resource для регистрации сервиса в Prometheus-е 7
  6. Лемма об операторах • Operators are software extensions to Kubernetes

    that make use of custom resources to manage applications and their components. • По сути своей мы подражаем работе человека-оператора. 9
  7. Примеры операторов • https://github.com/prometheus-operator/prometheus-operator • https://github.com/zalando/postgres-operator • https://github.com/strimzi/strimzi-kafka-operator • https://operatorhub.io/

    Суть одна, мы описываем сущности как код в виде custom resources и выполняем в зависимости от «конфигурации» некоторые действия. 10
  8. «Доказываем теорему» • Создаем crd для ключевых сущностей Kafka (topic,

    user, acl) • При подключении пользователя генерируются cr соответствующих типов конкретно для него и загружаются в k8s кластер • Оператор видит новые ресурсы и создает в Kafka и Zookeeper’e соответствующие сущности • При модификации существующих ресурсов оператор вносит соответствующие изменения. • НИКТО В Kafka И Zookeeper НАПРЯМУЮ РУКАМИ НЕ ХОДИТ. ∎ 12
  9. Почему не готовое решение? • Хотелось попробовать ☺ • Существующие

    решения «оверкилл» для нашей задачи. • Какие-то решения были заточены под «свой клауд». 13
  10. Почему Java? • Хотелось понять можно ли погрузиться в мир

    «новомодных штук» используя проверенный язык. • Да, можно было сделать на любом другом подходящем. • Dev-ы отправились в мир Ops, вооруженные знакомыми инструментами. • “One-shot” язык сильно усложнит доработки спустя время. 14
  11. Почему не Spring Quarkus? • Supersonic subatomic java ☺ •

    Поддерживает стандарт JavaEE • Возможность собрать native image Если хочется большего про Quarkus: Twitter: @DaschnerS (Sebastian Daschner) 15
  12. Что такое native image? • Исполняемый файл скомпилирован под конкретную

    архитектуру (исполняется не байткод, а «бинарник») Это стало возможным после выпуска Oracle GraalVM, Quarkus был первым фреймворком который предоставил возможность без боли собрать native image. Если хочется большего про GraalVM: Twitter: @shelajev (Oleg Šelajev) 16
  13. Как устроен процесс • Гитлаб -> создает ресурсы в кластере.

    • Оператор -> мониторит ресурсы, модифицирует внутренности Kafka и Zookeeper • Администратор -> модифицирует ресурсы. 21
  14. План второй части • Конфигурация • Структура проекта • Зависимости

    • Жизненный цикл ресурса вместе с кодом • Грабли • Выводы 22
  15. Полезные ссылки • Quarkus - https://quarkus.io/ • Fabric8 kubernetes client

    - https://github.com/fabric8io/kubernetes- client • GraalVM - https://www.graalvm.org/reference-manual/native-image/ 23
  16. Выводы • На Java писать инфраструктурные полезняшки МОЖНО • Native

    image (GraalVM) реально работает • Quarkus поддерживает работу с native image “из коробки” • На этом слое магии нет 24
  17. Спасибо центру за это за внимание! Полезные ссылки • Quarkus:

    https://quarkus.io/ • Fabric8 kubernetes client: https://github.com/fabric8io/kubernetes-client • GraalVM: https://www.graalvm.org/reference-manual/native-image/ • CRD: https://kubernetes.io/docs/tasks/extend-kubernetes/custom- resources/custom-resource-definitions/ Михаил Папин Руслан Зайнутдинов ЦФТ 🏳