2

我正在尝试sonatype/nexus3在 openshift online v3 pro 上运行。如果我只是使用 Web 控制台从图像创建一个新应用程序,它只会分配 512Mi 并且它会因 OOM 而死。它确实被创建了,并在它因内存不足而死之前记录了很多 java 输出。使用 Web 控制台时,似乎没有办法在图像上设置内存。当我尝试编辑 pod 的 yaml 时,它不允许我编辑内存限制。

阅读有关内存限制的文档表明我可以使用以下方法运行:

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

然后它甚至没有开始。它死于:

{kubelet ip-172-31-59-148.ec2.internal} Error: Error response from daemon: {"message":"create c30deb38b3c26252bf1218cc898fbf1c68d8fc14e840076710c211d58ed87a59: mkdir /var/lib/docker/volumes/c30deb38b3c26252bf1218cc898fbf1c68d8fc14e840076710c211d58ed87a59: permission denied"}

更多信息来自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"}

我不知道为什么如果我使用 web 控制台我不能分配更多的内存。我不确定为什么oc run用 mkdir 错误运行它会死掉。谁能告诉我如何sonatype/nexus3在 openshift online pro 上运行?

4

3 回答 3

1

查看文档,我发现它是一个 Java VM 解决方案。

使用 Java 8 时,仅使用以下 2 个运行时 Java VM 选项即可显着提高内存使用率:

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

我刚刚部署了消耗超过 650 MB RAM 的容器(Spring Boot JAR)。仅使用这两个(新)选项,RAM 消耗降至 270 MB!!!

因此,有了这 2 个运行时设置,所有 OOM 都被远远抛在了后面!享受!

于 2018-08-29T15:13:50.827 回答
0

好的,mkdir /var/lib/docker/volumes/被拒绝的权限似乎是图像需要/nexus-data安装并且被拒绝。我通过从 Web 控制台部署(死于 OOM)看到了这一点,但编辑 yaml 以查看创建的 pod 以查看生成的卷挂载。

使用以下 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. sonatype/docker-nexus3-Xmx1200m中记录的法师集。因此,如果您分配的内存小于 1200Mi,当堆增长超过限制时,它将与 OOM 一起崩溃。您也可以将请求和最大值设置为最大堆端。
  2. 当分配的内存太低时,它在设置损坏数据库日志的数据库时崩溃了,这意味着当我重新创建它时它进入崩溃循环“无法从 0 字节文件加载 4 字节”更多记忆。似乎emptyDir文件在崩溃重启和内存更改之间徘徊(我认为这是记录在案的行为)。我必须用不同的名称重新创建一个 pod 以获得一个干净的 emptyDir 并分配 1200Mi 的内存才能让它全部启动。
于 2017-10-23T23:05:50.513 回答
0

您可能还想遵循 OpenShift 文档https://docs.openshift.com/online/dev_guide/app_tutorials/maven_tutorial.html中的教程

我已经在 OpenShift Online Pro 中成功部署了它

于 2017-10-24T01:24:03.690 回答