openshift v3在线专业版的卷和内存限制问题

openshift v3在线专业版的卷和内存限制问题,openshift,redhat,nexus,sonatype,openshift-online,Openshift,Redhat,Nexus,Sonatype,Openshift Online,我正试图在openshift online v3 pro上运行一个sonatype/nexus3。如果我只是使用web控制台从图像创建一个新的应用程序,它只分配512Mi,然后随着OOM而消亡。但它确实是在内存耗尽之前创建的,并记录了大量java输出。使用web控制台时,不会出现设置图像内存的方法。当我试图编辑pod的yaml时,它不允许我编辑内存限制 阅读这篇文章表明,我可以这样做: oc运行nexus333--image=sonatype/nexus3--limits=memory=750M

我正试图在openshift online v3 pro上运行一个
sonatype/nexus3
。如果我只是使用web控制台从图像创建一个新的应用程序,它只分配512Mi,然后随着OOM而消亡。但它确实是在内存耗尽之前创建的,并记录了大量java输出。使用web控制台时,不会出现设置图像内存的方法。当我试图编辑pod的yaml时,它不允许我编辑内存限制

阅读这篇文章表明,我可以这样做:

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

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

{kubelet ip-172-31-59-148.ec2.内部}错误:来自的错误响应 守护程序:{“消息”:“创建 C30DEB3B3C26252BF1218CC898FBF1C68D8FC14E840076710C21D58ED87A59: mkdir /var/lib/docker/volumes/C30DEB338B3C26252BF1218CC898FBF1C68D8FC14E840076710C21D58ED87A59: 权限被拒绝“}

有关oc get事件的更多信息:

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控制台,我不能分配更多内存。我不知道为什么用
ocrun
运行它会导致mkdir错误。谁能告诉我如何在openshift online pro上运行
sonatype/nexus3
。我通过从web控制台部署(死在OOM中)看到了这一点,但是为创建的pod编辑yaml以查看生成的卷装载

使用
cat nexus3_pod.ephemeral.yaml | oc create-f-
创建具有以下yaml的映像,此时容器将启动卷装载和显式内存设置:

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
注释

  • mage设置
    -Xmx1200m
    ,如中所述。因此,如果分配的内存小于1200Mi,当堆增长超过限制时,它将与OOM一起崩溃。您还可以将request和max设置为max-heap-side
  • 当分配的内存太低时,它崩溃死亡,就在它设置数据库时损坏了数据库日志,这意味着当我使用更多内存重新创建数据库时,它进入了崩溃循环“无法从0字节文件加载4字节”。似乎使用
    emptyDir
    时,文件会在崩溃重启和内存更改之间挂起(我认为这是记录在案的行为)。我不得不用不同的名字重新创建一个pod,以获得一个干净的空硬盘,并分配1200英里的内存,以使其全部启动
    您可能还需要遵循OpenShift文档中的教程


    我已经在OpenShift Online Pro中成功地部署了它。查看文档,我发现它是一个Java虚拟机解决方案

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

    。。。“-XX:+UnlockExperimentalVMOptions”,“-XX:+UseCGroupMemoryLimitForHeap”

    我刚刚部署了我的容器(springbootjar),它消耗了超过650mbram的内存。仅使用这两个(新)选项,RAM消耗就下降到270 MB


    因此,有了这两个运行时设置,所有OOM都远远落后!享受吧

    您通常不会使用
    ocrun
    在OpenShift中部署现有的容器映像。您可以使用
    ocnewapp
    ,因为它会创建部署配置和其他位,以保持所有配置的运行。
    oc run
    命令的级别非常低。当您拥有部署配置时,您可以使用部署页面上的下拉菜单在web控制台中编辑该配置的资源。您可能希望通过上的教程更好地了解如何将应用程序部署到OpenShift。我尝试了
    oc run
    ,但文档中有它。我已经在CDK/minishift上运行了nexus3,因为我正在阅读文档。@GrahamDumpleton我编辑了这个问题,以引用引用
    oc run
    的文档。感谢您提供了很多有用的信息,但该文档是针对nexus2
    sonatype/nexus
    的,它的页面指向
    sonatype/nexus3
    版本查看文档,数据存储持久名称不同
    /sonatype work
    而不是
    /nexus data
    ,因此安装pvc的命令需要不同。在这种情况下,我们需要2017年5月发布的
    dotnet
    core2.0的nuget和原始存储库。所以我们的目标是最新的nexus版本。我尝试了nexus2出现的文档,我可以登录,当我点击一个按钮创建一个新的回购时,它会与OOM崩溃。看看控制台,它被默认为512Mi,所以我必须增加它。啊哈,看来nexus是贪婪的。nexus3正如我分配的1Gi一样,但映像中设置的JVM选项设置了
    -Xmx1200m
    ,因此,如果创建的pod/容器的默认值较小,它将超出限制,并随OOM一起消失。