[HUN] Kubernetes - Spring livereload 3. rész - Távoli hibakeresés

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

Ebben a fejezeten engedélyezzük a K8s-en futó alkalmazásunk távoli hibakeresését.

Ehhez meg kell adnunk a JVM-nek, mely portot szeretnénk megnyitni erre a célra. Ezt már korábban megtettük az alábbi környezeti változó beállításával a konténerünkben (build.gradle):

JAVA_TOOL_OPTIONS=
-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n

A Java Debug Wire Protocol beállításánál meg kell adnunk a közvetítő réteget, valamint a portot, amelyen várakozik a kapcsolatra. Szeretnénk ha aktív hibakereső kapcsolat nélkül is elindulna az alkalmazás ezért a futást nem függesztjük fel.

Az 5005-ös port ‘távolról’ nem elérhető, míg ki nem nyitjuk. Ehhez - a 8080-as porthoz hasonlóan - fel kell vennük a Deployment leíró ports szekciójába, valamint hozzá kell rendelnük egy NodePort-ot. Nem szeretnénk minden környezetbe kiajánlani a portot, így a dev overlays alatt egy kustomize patchet hozunk létre, mely csak ezen környezet esetén addja hozzá a portokat a fent említett leírókhoz.

Egészítsük ki a dev könyvtár alatti kustomization.yaml fájlt a következő bejegyzéssel:

overlays/dev/kustomization.yaml

A patchJson6902 alatti bejegyzésekre a Kustomize keresést hajt végre az adott nevű és típusú leírókban, ahol a path-ban megadott elérésű fa csomóponthoz hozzáilleszti (add művelet esetén) a kívánt értéket.
Mivel a 8080-as portot is meg szeretnénk tartani, az új értéket a ports tömb 1. indexére illesztjük be (az indexelés 0-val kezdődik).

Több port esetén kötelező nevet adni az egyes portoknak, módosítjuk a Deployment és NodePort leírókat a base könyvtárban.

Emlékeztetőül a könyvtárszerkezet:

Directory stucture

Egészítsük ki az app-deployment.yaml fájlt a kövezkezővel:

ports:
- containerPort: 8080
name: app-port

Valamint a client-port-service.yaml-t:

ports:
- port: 8080
targetPort: 8080
nodePort: 30000
name: app-port

Ezt követően elindíthatjuk az alkalmazást az alábbi paranccsal:

skaffold dev --port-forward

A debug portot elérhetjük a NodePort-kénet kivezetett 30005-ös porton, mivel azonban a skaffold dev parancs az összes service portot forwardolja a localhost azonos portjára, így az 5005-ös porton is hozzáférünk.

skaffold startup log

Nincs más dolgunk mind felparaméterezni a debuggert és elindítani.
Például IntelliJ esetén a következőképpen:

Intellij remote debug settings

Ezután az alkalmazást végpontjára (http://localhost:8080/api/v1/users) get kérést küldve láthatjuk hogy a futás megáll az adott hívási ponton.

Debugg example

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

A sorozat részei:

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

--

--