С помощью этого руководства вы развернете инфраструктуру Managed Kubernetes и установите решение KEDA для event-driven автомасштабирования приложений.
Вы настроите масштабирование Kubernetes Job на основе сообщений из очереди RabbitMQ, что позволит реализовать обработку событий и горизонтальное масштабирование без привязки к метрикам потребления ресурсов.
В результате вы получите решение для асинхронной обработки задач в Kubernetes с использованием KEDA.
Вы будете использовать следующие сервисы:
Managed Kubernetes — сервис управления кластерами Kubernetes на вычислительных ресурсах облака.
Artifact Registry для хранения, совместного использования и управления Docker-образами и Helm-чартами.
Виртуальные машины — сервис для создания виртуальных машин, используемых для управления кластерами и запуска утилит администрирования.
KEDA — платформа для событийного масштабирования приложений в Kubernetes на основе внешних триггеров, таких как очереди сообщений и базы данных.
Шаги:
Перед началом работы
Если вы уже зарегистрированы, войдите под своей учетной записью.
1. Сгенерируйте ключи доступа для интеграции
На этом этапе получите ключи для программного доступа к ресурсам облачной платформы, которые потребуются для интеграции с Managed Kubernetes и приватным реестром Artifact Registry.
Сохраните значения Key ID и Key Secret в надежном месте, чтобы использовать их при загрузке образов контейнеров и подключении к кластеру Managed Kubernetes.
2. Разверните ресурсы в облаке
Этот шаг включает подготовку подсети, NAT-шлюза и виртуальной машины для последующей работы и управления кластером.
Создайте подсеть для размещения кластера Managed Kubernetes.
Создайте SNAT-шлюз в той же зоне доступности, что и подсеть.
Создайте виртуальную машину с подсетью с публичным IP-адресом. Выберите ранее созданную подсеть для подключения.
3. Подготовьте окружение виртуальной машины
На этом этапе настройте окружение для управления облачной инфраструктурой и кластером Kubernetes.
Подключитесь к виртуальной машине по SSH, используя соответствующий SSH-клиент.
Установите необходимые инструменты для работы с Managed Kubernetes:
Установите Git и клонируйте репозиторий демоприложения:
Установите Git для ОС на базе Ubuntu/Debian:
sudo apt update && sudo apt install -y gitКлонируйте репозиторий демоприложения:
git clone https://gitverse.ru/sedg1l/keda-p2
Установите Docker:
curl -fsSL https://get.docker.com -o get-docker.shsudo sh ./get-docker.shsudo groupadd dockersudo usermod -aG docker $USERnewgrp dockerУстановите Helm:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
4. Создайте кластер Managed Kubernetes и подключитесь к нему
На этом этапе разверните кластер Kubernetes.
Создайте кластер в сервисе Managed Kubernetes:
Название: Cluster-keda.
Количество мастер-узлов: 1.
Конфигурация мастер-узла: 2 vCPU, 4 ГБ RAM.
Публичный IP: включен.
-
Гарантированная доля vCPU: 10%.
vCPU: 2.
RAM, ГБ: 4.
Количество узлов: 1.
Дождитесь окончания создания кластера.
Убедитесь, что в личном кабинете статус кластера — «Запущено».
Подключитесь к кластеру с управляющей виртуальной машины.
5. Создайте репозиторий Artifact Registry
На этом шаге создайте приватный реестр в сервисе Artifact Registry.
6. Установите MongoDB через Helm
На этом шаге вы установите MongoDB в кластер Managed Kubernetes.
Установите MongoDB с помощью Helm:
helm install mongodb oci://registry-1.docker.io/bitnamicharts/mongodb --set useStatefulSet=true --set auth.rootPassword=mongoПроверьте статус развертывания MongoDB:
kubectl get podsДождитесь, пока все поды MongoDB перейдут в состояние «Running».
7. Установите RabbitMQ через Helm
На этом шаге установите очередь сообщений RabbitMQ с помощью Helm в кластер Managed Kubernetes.
Установите RabbitMQ командой:
helm install rabbitmq oci://registry-1.docker.io/bitnamicharts/rabbitmq --set auth.username=user --set auth.password=P@ssw0rdПроверьте состояние подов RabbitMQ:
kubectl get podsДождитесь, пока все поды очереди RabbitMQ перейдут в состояние «Running».
8. Установите KEDA через Helm
На этом шаге вы установите KEDA для поддержки событийного масштабирования.
Добавьте репозиторий Helm и обновите его:
helm repo add kedacore https://kedacore.github.io/chartshelm repo updateУстановите KEDA в отдельное пространство keda:
helm install keda kedacore/keda --namespace keda --create-namespaceПроверьте статус подов KEDA:
kubectl get pods -n kedaДождитесь, пока все поды KEDA перейдут в состояние «Running».
9. Загрузите образы контейнеров в приватный реестр Artifact Registry
На этом этапе соберите и загрузите образы собственного приложения в приватный реестр.
Перейдите в папку репозитория приложения:
cd $HOME/keda-p2Откройте файл build.sh в удобном редакторе.
Укажите URI вашего приватного реестра и ключи доступа к облаку в переменных в начале скрипта:
<REPO> — адрес реестра Artifact Registry.
<LOGIN> — Key ID учетной записи.
<PASSWORD> — Secret Key учетной записи.
Сделайте скрипт исполняемым и выполните его:
chmod +x $HOME/keda-p2/build-images.sh$HOME/keda-p2/build-images.shСкрипт выполнит аутентификацию с помощью ключей доступа в Artifact Registry, соберет образы контейнеров через Docker Engine и загрузит их в указанный реестр.
10. Разверните приложение в Managed Kubernetes
На этом этапе выполните развертывание event-driven приложения, используя подготовленные манифесты.
Примените манифесты:
kubectl apply -f $HOME/keda-p2/deploy/Ознакомьтесь со схемой работы приложения:
При отправке POST-запроса на http://complex-app-service/send?name=<item-name>&content=<content> сервис complex-app отправляет сообщение с параметрами name и content в формате JSON в очередь RabbitMQ.
Ресурс ScaledJob периодически опрашивает очередь RabbitMQ. Когда в очередь приходит новое сообщение, ScaledJob создает новый Kubernetes Job с именем processor-job.
Ресурс processor-job извлекает сообщение, записывает его в MongoDB в формате JSON (name и content), после чего засыпает на 20 секунд.
Функция sleep имитирует, что processor-job обрабатывает какой-то «тяжелый» файл. Например, конвертирует видео.
Если бы вы масштабировали Deployment с помощью ресурса HPA, то реализовать описанное выше масштабирование было бы невозможно, так как нам необходимо масштабировать ресурс не на основании метрик утилизации ресурсов, а на основании событий.
Проверьте, что все необходимые поды созданы и работают.
11. Проверьте работу автомасштабирования KEDA
На завершающем этапе вы протестируете работу event-driven масштабирования через отправку сообщений и анализ работы Job.
Создайте тестовый под curl для взаимодействия с приложением:
kubectl run -it --rm curl-pod --image=curlimages/curl -- /bin/shВнутри curl-pod отправьте несколько POST-запросов на сервис для генерации событий:
curl -X POST "http://complex-app-keda-service/send?name=record1&content=content1"curl -X POST "http://complex-app-keda-service/send?name=record2&content=content2"curl -X POST "http://complex-app-keda-service/send?name=record3&content=content3"curl -X POST "http://complex-app-keda-service/send?name=record4&content=content4"curl -X POST "http://complex-app-keda-service/send?name=record5&content=content5"Проверьте, что данные были добавлены в MongoDB:
curl "http://complex-app-keda-service/data"Job-ресурсам потребуется некоторое время на запуск и выполнение, поэтому записи могут появиться в течение минуты.
Выйдите из curl-пода командой:
exitПроверьте количество созданных Job:
kubectl get jobsУбедитесь, что для каждого события KEDA запустила отдельный Job, реализуя event-driven масштабирование обработки.
Что дальше
В практической работе вы создали кластер Managed Kubernetes, установили KEDA в этом кластере и развернули в нем приложение, в котором реализовано event-driven масштабирование с помощью KEDA.
- Перед началом работы
- 1. Сгенерируйте ключи доступа для интеграции
- 2. Разверните ресурсы в облаке
- 3. Подготовьте окружение виртуальной машины
- 4. Создайте кластер Managed Kubernetes и подключитесь к нему
- 5. Создайте репозиторий Artifact Registry
- 6. Установите MongoDB через Helm
- 7. Установите RabbitMQ через Helm
- 8. Установите KEDA через Helm
- 9. Загрузите образы контейнеров в приватный реестр Artifact Registry
- 10. Разверните приложение в Managed Kubernetes
- 11. Проверьте работу автомасштабирования KEDA
- Что дальше