Подход заключается в использовании Init Container .
Идея состоит в том, чтобы иметь изображение для JProfiler отдельно от изображения приложения.Используйте изображение JProfiler для контейнера Init;Контейнер Init копирует установку JProfiler в том, совместно используемый этим Контейнером Init и другими контейнерами, которые будут запущены в модуле.Таким образом, JVM может ссылаться во время запуска на агент JProfiler с общего тома.
Это выглядит примерно так (подробнее см. В этой статье блога ):
volumes:
- name: jprofiler
emptyDir: {}
- Добавьте контейнер инициализации:
initContainers:
- name: jprofiler-init
image: <JPROFILER_IMAGE:TAG>
command: ["/bin/sh", "-c", "cp -R /jprofiler/ /tmp/"]
volumeMounts:
- name: jprofiler
mountPath: "/tmp/jprofiler"
Замените /jprofiler/
выше на правильный путьв каталог установки в образе JProfiler.Обратите внимание, что команда copy создаст каталог /tmp/jprofiler
, в который будет идти установка JProfiler - который используется в качестве пути монтирования.
- Определение монтирования тома:
volumeMounts:
- name: jprofiler
mountPath: /jprofiler
- Добавьте к аргументам запуска JVM JProfiler в качестве агента:
-agentpath:/jprofiler/bin/linux-x64/libjprofilerti.so=port=8849
Обратите внимание, что аргумента "nowait" нет.Это приведет к блокировке JVM при запуске и ожиданию подключения графического интерфейса JProfiler.Причина в том, что с этой конфигурацией агент профилирования будет получать свои параметры профилирования из графического интерфейса JProfiler.
Измените развертывание приложения, чтобы оно начиналось только с одной реплики.Кроме того, начните с нуля реплик и масштабируйте до единицы, когда будете готовы приступить к профилированию.
Чтобы подключиться из графического интерфейса JProfiler к удаленной JVM:
- Узнайте имя модуля (например,
kubectl -n <namespace> get pods
) и настройте переадресацию портов на него:
kubectl -n <namespace> <pod-name> port-forward 8849:8849
- Запустите JProfiler локально и укажите его на 127.0.0.1, порт 8849.
Измените локальный порт 8849 (номер слева от :
), если он недоступен;затем укажите JProfiler на этот другой порт.