Разработка на Java для Kubernetes

Все о разработке высоконагруженных сервисов на Java в распределенных средах на основе Kubernetes и Istio

Курс по разработке для знающих Java

Урок 1

Мы начнем с создания микросервиса service-back-sample, который принимает REST запросы для поиска информации о сотрудниках компании по первым буквам фамилии или табельному номеру. В рамках первого урока мы разработаем исходный код приложения, локально установим кластер Kubernetes и разместим в нем наш микросервис.

При разработке мы будем использовать Spring Boot, сборщик gradle, спецификацию OpenApi, библиотеки lombook для декларативной генерации служебных методов классов и mapstruct для генерации классов маппинга.

Исходный код будет покрыт тестами на jUnit5 с использованием библиотеки Mockito. Классы исходного кода будут приложены к тексту урока, но некоторые тесты и классы нужно будет разработать самостоятельно. В платной версии курса также предоставляется доступ к исходному коду всех уроков на Github.

Урок 2

Теперь нам нужно установить в Kubernetes стек мониторинга, включающий Prometheus, Grafana и Custom Resource Definitions (CDR) для настройки мониторинга конкретных сервисов. После этого мы добавим в наш микросервис код по откидыванию метрик, фиксирующих ключевые показатели его работы и создадим в Grafana дашборд для их отображения.

Для того, чтобы протестировать дашборд мы создадим Job на основе k6, с помощью которого в течение нескольких минут на service-back-sample будет подаваться нагрузка. Затем посмотрим метрики и сравним перцентили времени выполнения запросов, которые выдаст k6 с теми, что мы увидим на дашбордах. Настроим входящий RateLimiter на запросы к service-back-sample и также протестируем его работу.

Урок 3

 Настало время настроить централизованный сбор логов и поиск по ним. До сих пор мы имели возможность просматривать и скачивать логи только из консоли конкретного пода, а осуществлять поиск по логам со всех подов микросервиса возможности не было. На этом уроке мы установим в Kubernetes стек логирования, внесем необходимые доработки в service-back-sample, настроим дашборд для логов в Grafana и протестируем, подав нагрузку на наш микросервис с помощью k6..

Урок 4

 На этом уроке мы настроем доступ по протоколам http и https к service-back-sample из-за пределов кластера Kubernetes. Сделаем мы это двумя способами — используя средства Kubernetes и через сервисную сетку Istio.

 

Урок 5

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

Урок 6

 Рассмотрим возможности распределеления нагрузки по версиям микросервиса, используя средства Istio – Virtual Service и Destination Rule. Протестируем механизм с помощью k6 и увидим результаты на дашборде. Объясним как с помощью этого механизма организовать канареечные релизы и A/B тестирование и сравним способ обновления версии с помощью канареечных релизов с простым обновлением с использованием Rolling Update.

Урок 7

 На этом уроке мы настроим и протестируем работу переповторов, автоматических выключателей (circuit breaker) и эмуляцию задержек с помощью Virtual Service и Destination Rule

Урок 8

 До сих пор в качестве источника данных нашего микросервиса мы использовали json-файл. Настало время подключить базу данных. В качестве БД для хранения данных о сотрудниках мы будем использовать PostgreSQL. В рамках урока мы настроим работу c БД по SSL и расширим проект интеграционными тестами, использующими встроенную БД.

Урок 9

 REST взаимодействие, которое использует service-back-sample, не считается надежным механизмом в силу его синхронности. Более надежный способ — асинхронная передача запросов и ответов через брокеры сообщений. На этом уроке мы внедрим в service-back-sample тестовую Кафку, доработаем код на асинхронное взаимодействие через этот брокер сообщений, напишем интеграционные тесты, использующие Кафку. Доработаем также откидывание метрик Кафки, а в следующих уроках создадим дашборд для их отображения

Урок 10

 Этот урок посвящен разработке еще одного сервиса — service-front-sample. Он предназначен для получения информации о сотрудниках из service-back-sample. Мы изменим конфигурацию, убрав доступ к service-back-sample из-за пределов кластера Kubernetes и выведем наружу service-front-sample. Подадим нагрузку на service-front-sample с помощью k6 и протестируем сквозной поиск по логам 2-х микросервисов. Также в рамках написания интеграционных тестов для service-front-sample научимся использовать заглушку для веб сервера, с целью эмуляции ответа от вызываемого микросервиса.

Урок 11

 В рамках этого урока мы настроим трассировку взаимодействия микросервисов с помощью Zipkin и познакомимся с трассировочным дашбордом, который автоматически предоставляется этой системой трассировки

Урок 12

 Теперь у нас есть 2 микросервиса и мы можем полноценно протестировать их асинхронное взаимодействие через Кафку. Мы доработаем service-front-sample, чтобы он умел посылать запросы и временно отключать взаимодействие с Кафкой, в случае ее недоступности, используя автоматические выключатели. Настроим SSL доступ к Кафке из обоих микросервисов, создадим дашборд с метриками Кафки и, как обычно, протестируем взаимодействие с помощью k6.

Урок 13

 На этом уроке мы познакомимся с реактивным подходом к разработке микросервисов, реализовав функционал service-back-sample и service-front-sample в реактивном стиле, используя библиотеки Webflux и ProjectReactor. Разберем настройки производительности Webflux. Сравним реактивный подход с синхронным.

Урок 14

 На предыдущих уроках мы узнали как программно реализовать Rate Limiter для каждой копии микросервиса. Данный урок посвящен настройке глобального рэйтлимитера, отслеживающего запросы ко всем подам приложения.

Урок 15

На этом занятии мы попросим нейросеть GigaChat сгенерировать нам установочный пакет для helm и объяснить как это все работает. Ну, и, конечно, проверим установку наших конфигураций в кластер с помощью helm. Таким образом, мы одновременно познакомимся с темой использования искусственного интеллекта при разработке и менеджером пакетов для Kubernetes — helm

Поделиться
Copyright © 2025 Разработка на Java для Kubernetes