[HUN] Kubernetes - Spring livereload 3. rész - Távoli hibakeresés
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:
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:
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.
Nincs más dolgunk mind felparaméterezni a debuggert és elindítani.
Például IntelliJ esetén a következőképpen:
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.
A forráskód elérhető githubon.