Розгортання Spring Boot за допомогою Juju та Kubernetes

У попередній статті ми розглянули, як легко створити контейнери Spring Boot за допомогою Rockcraft. Наступним логічним кроком є розгортання та експлуатація вашої програми в продукційному середовищі. Екосистема Juju є ключем до спрощення цього процесу.

У цій статті ми пройдемо через кроки, необхідні для розгортання програми Spring Boot у виробничих умовах, використовуючи Juju та Kubernetes. Метою є продемонструвати інтеграцію програми з важливими сервісами, такими як PostgreSQL для управління базами даних та Traefik для контролю доступу.

Зазвичай, розгортання та експлуатація контейнерів Spring Boot легше сказати, ніж зробити. Будь-яка не тривіальна програма вимагатиме інтеграції з іншими програмними компонентами, такими як бази даних, брокери повідомлень та сервіси автентифікації. Деякі з цих компонентів складні в експлуатації. Більш того, ваша програма повинна бути доступною ззовні. Для експлуатації в умовах Дня 2 також необхідно проводити регулярне обслуговування та правильно контролювати вашу програму.

На щастя, Juju пропонує потужну екосистему, що складається з безлічі високоякісних програмних операторів, які можна використовувати для розгортання, інтеграції та управління життєвим циклом в будь-якому масштабі, на будь-якій інфраструктурі.

З виходом розширень фреймворку Spring Boot для Rockcraft і Charmcraft, якщо ваша програма дотримується найкращих практик методології 12-факторного програмування, ви можете скористатися перевагами екосистеми Juju з коробки.

Якщо ви розробляєте програму Spring Boot, ми рекомендуємо вам спробувати підтримку devpack для Spring, а потім слідувати цьому посібнику для написання вашого Charm для Spring Boot.

А тепер давайте розглянемо, як це працює, за допомогою spring-petclinic.

Налаштування розробницької машини з Canonical Kubernetes та Juju

Ми почнемо з віртуальної машини, створеної з нуля за допомогою Multipass, та підготуємо нашу розробницьку машину за допомогою інструмента Concierge.

Запустіть нову віртуальну машину та зайдіть у систему:

multipass launch --cpus 4 --disk 30G --memory 4G --name blogpost 24.04
multipass shell blogpost

Ми будемо налаштовувати тестову машину з Concierge, яка встановить та налаштує Rockcraft, Charmcraft, Canonical Kubernetes та Juju. Крім того, ми оновимо балансувальник навантаження для роботи під основною IP-адресою машини та встановимо реєстр зображень OCI:

sudo snap install --classic concierge
sudo concierge prepare -p k8s --charmcraft-channel latest/edge
PREFSRC=$(ip -4 -j route get 2.2.2.2 | jq -r '.[] | .prefsrc')
sudo k8s set load-balancer.cidrs=$PREFSRC/32
curl https://raw.githubusercontent.com/canonical/spring-petclinic/refs/heads/resources/registry.yaml | kubectl apply -f -

Отримання програми spring-petclinic

spring-petclinic – це програма, з якою ми будемо працювати. Це зразок програми, створеної командою Spring для демонстрації реальної веб-програми, розробленої за допомогою фреймворка Spring.

Клонуйте репозиторій spring-petclinic.

git clone https://github.com/canonical/spring-petclinic.git
cd spring-petclinic

Дотримуючи інструкцій репозиторію spring-petclinic, ви зможете створити jar-файл і запустити його з командного рядка. Це досить просто, але явно не готове до виробництва, навіть база даних знаходиться в пам’яті.

Створення образу

Давайте підготуємо образ – відповідний OCI образ – для програми. Ми можемо використовувати як Maven, так і Gradle для створення програми, але в цьому прикладі ми використаємо Maven. У каталозі spring-petclinic видаліть артефакти Gradle та ініціюйте проект rockcraft:

rm -rf build.gradle gradlew gradle
rockcraft init --profile spring-boot-framework

Упакуйте образ і завантажте його в реєстр OCI:

ROCKCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=True rockcraft pack
rockcraft.skopeo copy --insecure-policy --dest-tls-verify=false oci-archive:spring-petclinic_0.1_amd64.rock docker://localhost:32000/spring-petclinic:0.1

На цьому етапі ми маємо повністю відповідний OCI образ. Але для повної інтеграції з екосистемою Juju нам потрібен charm, програмний оператор.

Створення charm

Давайте його створимо:

mkdir charm
cd charm
charmcraft init --profile spring-boot-framework --name spring-petclinic

Оскільки ми хочемо використовувати PostgreSQL замість бази даних в пам’яті, додайте наступні рядки до файлу charmcraft.yaml:

requires: postgresql: interface: postgresql_client optional: false limit: 1

І ми готові створити charm. Упакуйте його:

CHARMCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=True charmcraft pack

Перевірка

На цьому етапі у нас є charm для spring-petclinic, який буде безшовно інтегруватися з PostgreSQL.

Давайте протестуємо його з новою моделлю Juju в хмарі Kubernetes:

juju add-model spring-petclinic
juju deploy ./spring-petclinic_amd64.charm spring-petclinic --resource app-image=localhost:32000/spring-petclinic:0.1 --config app-profiles=postgres

Розгорніть PostgreSQL і Traefik та інтегруйте з spring-petclinic:

juju deploy postgresql-k8s --trust
juju integrate spring-petclinic postgresql-k8s
juju deploy traefik-k8s --trust
juju integrate spring-petclinic traefik-k8s

Через деякий час ваша програма готова до використання! Ви можете перевірити це за допомогою команди juju status:

Ви можете отримати URL програми за допомогою:

juju run traefik-k8s/0 show-proxied-endpoints

І ось так, ви можете це використовувати!

Програма працює в кластері Kubernetes, а Traefik діє як вхідний контроль. Ваша програма spring-petclinic тепер використовує PostgreSQL для зберігання своїх даних. Charmed PostgreSQL K8s надав облікові дані для бази даних вашій програмі spring-petclinic, і вона готова до експлуатації в виробничих умовах.

Непогано для початку.

Підтримка

У вас є проект або налаштування, де ви хочете впровадити це рішення? Якщо у вас є питання щодо інструментів 12-факторного програмування для Rockcraft і Charmcraft, зв’яжіться з нами.

Що далі?


Що таке Kubernetes?

Kubernetes, або K8s, є відкритою платформою, започаткованою компанією Google, яка спочатку була простим засобом оркестрації контейнерів, але перетворилася на платформу для розгортання, моніторингу та управління додатками та сервісами в різних хмарах.

Дізнайтеся більше про Kubernetes ›

Kubernetes без зусиль

Усе, що вам подобається в основній версії, з корпоративною гарантією. Canonical Kubernetes пропонує легкість установки та обслуговування, а також спокій для ваших контейнеризованих робочих навантажень. Максимізуйте продуктивність та надавайте оновлення безпеки на будь-якому хмарному сервісі.

Відкрийте для себе Canonical Kubernetes ›