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




