Как Openshift запускает флягу - PullRequest
0 голосов
/ 12 декабря 2018

Я развертываю образ с толстой флягой Spring-boot в Openshift.Я основываю свое изображение на redhat-openjdk18-openshift: 1.2.

Мое приложение запускается нормально, и я вижу в терминале следующее

Starting the Java application using /opt/run-java/run-java.sh ...

exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
-XX:+UseParallelGC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40
-XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=100m 
-XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/MYAPPLICATION.jar

Мои вопросы:

  1. Откуда взялся этот клей (exec java ...)?И как Openshift знает, что этот jar-файл является исполняемым?
  2. Я хотел бы добавить несколько аргументов командной строки.Я нашел следующий способ, который работает: enter image description here

Но затем я теряю материал Jolokia выше.Есть ли лучший способ?

Обновление: я использую следующую стратегию:

стратегия:
..sourceStrategy:
.... from:
...... kind: ImageStreamTag
...... name: 'redhat-openjdk18-openshift: 1.2'
...... пространство имен: openshift

Тогда как: oc start-build $ SERVICE_NAME --from-file = my-app.jar

Кроме того, документация, на которую вы ссылались, является именно тем, что я делал.Видно на шаге (2) выше.А потом я теряю вещи Джолокии.Я думаю, что я ищу способ, которым Джо просто расширяет существующую точку входа, а не перегружает ее.

1 Ответ

0 голосов
/ 12 декабря 2018

Команда exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties является точкой входа контейнера, которая является командой и параметрами, которые выполняются при запуске контейнера.Точка входа устанавливается при построении изображения.

Вы не сказали, какую стратегию вы используете для построения изображения, но если вам нужен больший контроль над точкой входа и другими параметрами контейнера, вы можете использовать стратегия Docker .Используя этот метод, вы получите полный контроль над изображением, так что вы сможете устанавливать такие параметры, как переменные среды, параметры и аргументы.

Если вы не хотите беспокоиться о конфигурации сборки, тогда вы можете простосоздайте образ вне Openshift, используя Dockerfile, а затем разверните образ непосредственно в openshift.Вот учебник по Dockerfile .

Edit:

Кроме того, я думаю, что вы все еще можете использовать метод, который вы в настоящее время пробуете, но вам нужно будет добавить аргументы Jolokiaв спецификации вручную, но я думаю, что лучший способ все равно будет настроить все в конфигурации сборки, где вы можете контролировать точку входа и параметры для всего изображения вместо переопределения существующей точки входа.Вот документация для запуска команд внутри контейнера.

Редактировать:

Исходя из предоставленного вами обновления, я думаю, что переключение на докер-стратегию по-прежнему является вашим лучшим вариантом,Исходная стратегия просто автоматически создает образ для вас, но, как я упоминал выше, стратегия dockerfile позволит вам контролировать весь процесс сборки.Вот пример встроенного файла Docker:

  apiVersion: v1
  kind: BuildConfig
  metadata:
    annotations:
      description: Defines how to build the application
    labels:
      application: MYAPPLICATION
    name: MYAPPLICATION
    namespace: PROJECT_NAME
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: MYAPPLICATION:latest
    source:
      binary: {}
      dockerfile: |-
        FROM redhat-openjdk18-openshift:1.2
        COPY deployments/* /
        ENTRYPOINT  java -jar MYAPPLICATION.jar
      type: Binary
    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: redhat-openjdk18-openshift:1.2
      type: Docker

Таким образом, вы сможете расширить точку входа, скопировав существующую команду и добавив в нее все, что захотите.Возможно, вам придется создать поток изображений openjdk в вашем проекте, если его там еще нет.

...