Спецификация контейнеризации Java-приложений
Примечание: Применимо к ACP v3.14.3, v3.16.2, v3.18 и выше.
Только в том случае, если Java-приложение использует переменную среды JAVA_TOOL_OPTIONS, необходимо соблюдать следующие требования к контейнеризации, чтобы обеспечить применение собственной конфигурации приложения для переменной среды JAVA_TOOL_OPTIONS. В частности, при развертывании в Container Platform Deployment приложения должен явно объявлять переменную среды JAVA_TOOL_OPTIONS. Пример приведен ниже:
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-java-app
spec:
template:
spec:
containers:
- env: # Configuration examples
- name: JAVA_TOOL_OPTIONS
value: "-Xmx1024m -Xms512m"
name: your-java-app
Причина: когда Java-приложение (Deployment) добавляется на платформу в качестве сервиса (OpenTelemetry governance), Java Agent автоматически внедряется путем добавления параметра -javaagent в переменную среды JAVA_TOOL_OPTIONS pod, например -javaagent:/otel-auto-instrumentation-java/javaagent.jar. Это может быть переопределено, если JAVA_TOOL_OPTIONS настроена каким-либо другим способом.
Спецификация контейнеризации Java-приложений (устаревшая)
Примечание: Применимо к версиям ACP, отличным от новых спецификаций, указанных выше.
Чтобы обеспечить эффективное применение возможностей governance платформы к вашим Java-приложениям, следуйте приведенной ниже спецификации контейнеризации Java-приложений в процессе разработки и сборки:
Выбор базового образа
Рекомендуется использовать в качестве базового образа версии JDK 8u212 или более поздние.
Шаблон Dockerfile
Ознакомьтесь с шаблоном Dockerfile и инструкциями, приведенными в этом документе, и внесите соответствующие изменения в файл Dockerfile, используемый в проекте вашего Java-приложения.
Шаблон Dockerfile приведен ниже:
FROM eclipse-temurin:8-alpine
VOLUME /tmp
# Установите часовой пояс контейнера и добавьте учетную запись администратора, а также создайте ее домашний каталог.
# Примечание: способ установки часового пояса может различаться в зависимости от ОС базового образа.
# Примечание: для выполнения этого шага требуется доступ в Интернет для загрузки зависимостей. Если вы находитесь в изолированной внутренней сети, рассмотрите возможность использования публичного базового образа для выполнения этого шага.
RUN apk update \
&& apk add --no-cache tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& adduser -D admin
# Инструкция WORKDIR упрощает использование относительных путей в последующих инструкциях, чтобы упростить сценарий.
WORKDIR /home/admin/
# По соображениям безопасности используйте учетную запись без прав root, чтобы избежать выполнения команд вроде apt-get.
USER admin
# Параметр COPY --chown устраняет необходимость повторного выполнения chown.
# Примечание: убедитесь, что start.sh имеет права на выполнение.
COPY --chown=admin:admin start.sh \
target/app.jar \
/home/admin/
# Запустите контейнер, выполнив сценарий.
ENTRYPOINT ["./start.sh"]
Содержимое сценария start.sh, на который ссылается шаблон Dockerfile, приведено ниже. Сохраните файл сценария в том же каталоге, что и Dockerfile.
#!/bin/sh
# -e Немедленно завершить работу, если команда завершается с ненулевым статусом.
# -x Отображать команды и их аргументы по мере выполнения.
set -ex
# Использовать значение переменной среды JAVA_OPTS в качестве параметра запуска для службы JAVA, автоматически подставляя значение переменной среды JAVA_OPTS из текущего окружения во время выполнения.
# Используйте exec, чтобы программа Java могла получить сигнал SIGTERM.
exec /usr/bin/java ${JAVA_OPTS} \
-Djava.security.egd=file:/dev/./urandom \
-jar /home/admin/app.jar ${RUN_ARGS} "$@"