OpenShift v3 онлайн про проблемы объема и ограничения памяти

Я пытаюсь запустить sonatype/nexus3 на openshift онлайн v3 pro. Если я просто использую веб-консоль для создания нового приложения из изображения, он назначает ему только 512Mi, и он умирает с OOM. Он был создан, хотя и записал много выходных данных Java, прежде чем он умер из памяти. При использовании веб-консоли не отображается способ установки памяти на изображении. Когда я пытаюсь отредактировать yaml модуля, это не позволяет мне редактировать ограничение памяти.

Чтение документов об ограничениях памяти позволяет предположить, что я могу работать с этим:

oc run nexus333 --image=sonatype/nexus3 --limits=memory=750Mi

Тогда это даже не начинается. Умирает с:

{Kubelet ф-172-31-59-148.ec2.internal} Ошибка: Ошибка ответа от демона: {"сообщение":"создать c30deb38b3c26252bf1218cc898fbf1c68d8fc14e840076710c211d58ed87a59: MkDir / вар / Библиотека / грузчик / томов /c30deb38b3c26252bf1218cc898fbf1c68d8fc14e840076710c211d58ed87a59: доступ запрещен"}

Больше информации от oc get events:

FIRSTSEEN   LASTSEEN   COUNT     NAME                KIND                    SUBOBJECT                     TYPE      REASON                        SOURCE                                    MESSAGE
16m         16m        1         nexus333-1-deploy   Pod                                                   Normal    Scheduled                     {default-scheduler }                      Successfully assigned nexus333-1-deploy to ip-172-31-50-97.ec2.internal
16m         16m        1         nexus333-1-deploy   Pod                     spec.containers{deployment}   Normal    Pulling                       {kubelet ip-172-31-50-97.ec2.internal}    pulling image "registry.reg-aws.openshift.com:443/openshift3/ose-deployer:v3.6.173.0.21"
16m         16m        1         nexus333-1-deploy   Pod                     spec.containers{deployment}   Normal    Pulled                        {kubelet ip-172-31-50-97.ec2.internal}    Successfully pulled image "registry.reg-aws.openshift.com:443/openshift3/ose-deployer:v3.6.173.0.21"
15m         15m        1         nexus333-1-deploy   Pod                     spec.containers{deployment}   Normal    Created                       {kubelet ip-172-31-50-97.ec2.internal}    Created container
15m         15m        1         nexus333-1-deploy   Pod                     spec.containers{deployment}   Normal    Started                       {kubelet ip-172-31-50-97.ec2.internal}    Started container
15m         15m        1         nexus333-1-rftvd    Pod                                                   Normal    Scheduled                     {default-scheduler }                      Successfully assigned nexus333-1-rftvd to ip-172-31-59-148.ec2.internal
15m         14m        7         nexus333-1-rftvd    Pod                     spec.containers{nexus333}     Normal    Pulling                       {kubelet ip-172-31-59-148.ec2.internal}   pulling image "sonatype/nexus3"
15m         10m        19        nexus333-1-rftvd    Pod                     spec.containers{nexus333}     Normal    Pulled                        {kubelet ip-172-31-59-148.ec2.internal}   Successfully pulled image "sonatype/nexus3"
15m         15m        1         nexus333-1-rftvd    Pod                     spec.containers{nexus333}     Warning   Failed                        {kubelet ip-172-31-59-148.ec2.internal}   Error: Error response from daemon: {"message":"create 3aa35201bdf81d09ef4b09bba1fc843b97d0339acfef0c30cecaa1fbb6207321: mkdir /var/lib/docker/volumes/3aa35201bdf81d09ef4b09bba1fc843b97d0339acfef0c30cecaa1fbb6207321: permission denied"}

Я не уверен, почему, если я использую веб-консоль, я не могу выделить больше памяти. Я не уверен, почему запустить его с oc run умирает с ошибкой mkdir. Может кто-нибудь сказать мне, как запустить sonatype/nexus3 на openshift онлайн про?

3 ответа

Глядя в документацию, я вижу, что это решение Java VM.

При использовании Java 8 использование памяти может быть ДРАМАТИЧЕСКИ УЛУЧШЕНО с использованием только следующих 2 параметров Java VM во время выполнения:

... "-XX: + UnlockExperimentalVMOptions", "-XX: + UseCGroupMemoryLimitForHeap"...

Я только что развернул свой контейнер (Spring Boot JAR), который занимал более 650 МБ ОЗУ. Только с этими двумя (новыми) опциями потребление оперативной памяти упало до 270 МБ!!!

Итак, с этими двумя настройками времени выполнения все OOM остаются далеко позади! Наслаждайтесь!

Вы также можете следовать учебному руководству, которое находится в документации OpenShift https://docs.openshift.com/online/dev_guide/app_tutorials/maven_tutorial.html

Я успешно развернул это в OpenShift Online Pro

Хорошо mkdir /var/lib/docker/volumes/ В разрешении отказано, кажется, что изображение нуждается в /nexus-data Маунт и это отказано. Я видел это путем развертывания из веб-консоли (умирает с помощью OOM), но редактировал yaml для созданного модуля, чтобы увидеть сгенерированное монтирование тома.

Создание изображения с использованием следующего yaml cat nexus3_pod.ephemeral.yaml | oc create -f - с монтированием тома и явными настройками памяти контейнер теперь запустится:

apiVersion: "v1"
kind: "Pod"
metadata:
  name: "nexus3"
  labels:
    name: "nexus3"
spec:
  containers:
    -
      name: "nexus3"
      resources:
        requests:
          memory: "1200Mi" 
        limits:
          memory: "1200Mi" 
      image: "sonatype/nexus3"
      ports:
        -
          containerPort: 8081
          name: "nexus3"
      volumeMounts:
        - mountPath: /nexus-data
          name: nexus3-1
  volumes:
    - emptyDir: {}
      name: nexus3-1

Заметки

  1. Наборы мага -Xmx1200m как задокументировано в https://github.com/sonatype/docker-nexus3. Таким образом, если вы назначите память менее 1200Mi, она будет аварийно завершена с OOM, когда куча превысит лимит. С таким же успехом вы можете установить запрашиваемое и максимальное значение как максимальную сторону кучи.
  2. Когда выделенная память была слишком мала, она вылетала из строя так же, как и при настройке БД, которая повредила журнал базы данных, что означало, что она попала в цикл сбоя "не удалось загрузить 4 байта из файла 0 байтов", когда я воссоздала его с большим количеством объем памяти. Кажется, что с emptyDir файлы зависают между перезапусками сбоев и изменениями памяти (я думаю, это документированное поведение). Мне пришлось воссоздать модуль с другим именем, чтобы получить чистый emptyDir и выделенную память в 1200Mi, чтобы все это началось.
Другие вопросы по тегам