[HUN] Kubernetes - Spring livereload 1. rész — Egyszerű példa

Zalán Tóth
3 min readDec 12, 2021

Manapság egyre elterjedtebb a Kubernetes konténer manager használata az alkalmazások futtatásához, hisz nagyban megkönnyíti a szoftver telepítését és üzemeltetését, illetve rengeteg egyéb szolgáltatást nyújt.

Ebben a bejegyzés sorozatban megvizsgáljuk, hogy tudunk könnyen használható fejlesztői környezetet kialakítani, ahol az alkalmazás automatikusan telepítésre kerül bármely kódváltozás hatására.

Amire szükségünk lesz:

Első lépésként egy egyszerű applikációt hozunk létre Spring segítségével, mellyel REST interface-n keresztül kommunikálhatunk.
Az IntelliJ Pro beépített Spring Initializr segítségével ezt könnyedén megtehetjük. Amennyiben valaki community editiont vagy más IDE-t használ, a Spring Start weboldalon létrehozhatja a projectet, melyet letöltés után kicsomagolva importálhat.

Új project létrehozása

Függőségek közül kiválasztjuk a Spring Web-et, majd készítünk egy model-t és egy controller-t, amin keresztül lekérdezhetjük a felhasználók listáját.

User.java
UserController.java

Ezt követően az alkalmazást elindítva a http://localhost:8080/api/v1/users url-en tesztelhetjük a létrehozott végpontot.

Ahhoz hogy az alkalmazásunkat K8s-ben futtathassuk, először konténerizálnunk kell. Ehhez a Google által fejlesztett Jib-et hívjuk segítségül.

A build.gradle fájlba felvesszük a jib plugint és felparaméterezzük. Image alapnak az OpenJDK 17-es verzióját használjuk. Az általunk készített image nevét tetszőlegesen megválaszthatjuk. Beállítjuk a main osztály nevét, a használt portokat valamint felvesszük az 5005-ös portot remote debug használatához (erről később).

build.gradle

Miután elkészültünk, a gradle jibDockerBuild parancsot futtatva elkészíthetjük a konténerizált alkalmazást.

Amennyiben tesztelni szeretnénk, a következő paranccsal futtathatjuk docker konténerként a helyi 8080-as portra továbbítva az alkalmazás portját:

docker run -d -p 8080:8080 --name kubespring zalerix/kubernetes-spring-example

Ezután elkészítjük a deployment.yaml és skaffold.yaml fájlokat a project főkönyvtárában, melyek az alkalmazás K8s telepítésének leírói. Létrehozhatjuk kézzel vagy a következő parancs futtatásával:

skaffold init --generate-manifests

Generálás esetén a 8080-as portot állítsuk be port forwardingra. Így egy nem túl szép, de használható leírót kapunk. Bármely módon készült is, a leírókat személyre szabjuk.

Létrehozunk egy K8s Deployment erőforrást, mely a konténerünket telepíti, valamint definiálunk egy NodePort-ot hozzá, mely a 8080-as portot elérhetővé teszi a 30 000-es porton a külvilág felé. A NodePort-ot tesztelésre használjuk, a későbbiekben, több példány futtatásához Ingress-t fogunk beállítani.

deployment.yaml

A skaffold fájlban beállítjuk, hogy változás esetén jib buildet használva építse újra a konténert a megadott időbélyeg ellátva, majd kubectl segítségével telepítse újra és forwardolja a 8080-as portot.

skaffold.yaml

Ezután a következő paranccsal elindíthatjuk az alkalmazás K8s-en:

skaffold dev --port-forward

Az alkalmazás a 8080 és a 30 000-es porton is elérhető. Teszteléshez futás közben írjuk át az egyik nevet a controller metódusában. Ekkor a skaffold újratelepíti az alkalmazást, így a következő lekérdezésnél már az új értéket kapjuk vissza.

A forráskód elérhető itt.

A sorozat részei:

  1. Egyszerű példa (Skaffold)
  2. Kustomize bevezetése
  3. Távoli hibakeresés

--

--