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