Hier ist ein Beispiel für ein Projekt mit folgenden Abhängigkeiten.
- Spring Boot
- Gradle
- Google JIB
- Kubernetes
Ein Docker Image, wie mit folgendem Dockerfile definiert, kann als Basis-Image für das eigene Projekt verwendet werden.
FROM openjdk:11-oracleRUN yum -y install wget tar
# Download JProfiler
RUN wget https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_11_1_2.tar.gz -P /tmp/ &&\
tar -xzf /tmp/jprofiler_linux_11_1_2.tar.gz -C /usr/local &&\
rm /tmp/jprofiler_linux_11_1_2.tar.gz
# Set JProfiler agent variable
ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler11.1.2/bin/linux-x64/libjprofilerti.so=nowait,port=8849"
# Open port to connect to JProfiler agent
EXPOSE 8849
In der build.gradle Datei des Spring- Boot Projekts kann dieses Image im dem from Block der JIB Konfiguration verwendet werden.
jib {
from {
image = 'docker-base-jdk11-jprofiler:latest' // base image with profiling tools }
to {
image = "IMAGE_NAME:${project.version}" }
container {
ports = ['8080','8849']
labels = [maintainer: 'Markus Hanses <hanses.markus@gmail.com>']
jvmFlags = ['-agentpath:/usr/local/jprofiler11.1.2/bin/linux-x64/libjprofilerti.so=nowait,port=8849']
}
}
Im Deployment Manifest der Applikation muss der Port des JProfiler Agenten freigegeben werden.
- name: jprofiler containerPort: 8849
Anschliessend kann der Port des K8s Pod mit dem einem Port des lokalen Entwicklungsrechners verbunden werden, um den Zugriff in den K8s Cluster zu ermöglichen.kubectl port-forward POD_NAME 8849:8849
Danach kann die JProfiler Applikation auf dem Entwicklungsrechner über den lokalen Port mit dem K8s Pod verbunden werden und die Applikation überwacht werden. Nach dem Start von JProfiler, muss nun "Attach to running JVM" ausgewählt werden.
Anschliessend wähle "Direct connection to" und gebe die Adresse "localhost", sowie den Port "8849" ein.