我试图在openshift online v3 pro上运行sonatype/nexus3
。如果我只是使用Web控制台从图像创建一个新的应用程序,它只分配512Mi,它会死于OOM。它确实被创建了并且在内存不足之前记录了很多java输出。使用Web控制台时,似乎没有办法在图像上设置内存。当我尝试编辑pod的yaml时,它不允许我编辑内存限制。
阅读docs about memory limits它表明我可以运行:
oc run nexus333 --image=sonatype/nexus3 --limits=memory=750Mi
然后它甚至没有开始。它死了:
{kubelet ip-172-31-59-148.ec2.internal}错误:来自守护程序的错误响应:{“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错误。谁能告诉我如何在openshift在线专业版上运行sonatype/nexus3
?
您可能还想跟随OpenShift文档https://docs.openshift.com/online/dev_guide/app_tutorials/maven_tutorial.html中的教程
我已成功在OpenShift Online Pro中部署它
好吧mkdir /var/lib/docker/volumes/
许可被拒绝似乎是图像需要一个/nexus-data
坐骑,并被拒绝。我通过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
笔记
-Xmx1200m
记录了sonatype/docker-nexus3。因此,如果您分配的内存小于1200Mi,当堆超过限制时,它将与OOM一起崩溃。您也可以将requested和max设置为最大堆边。emptyDir
文件在崩溃重启和内存更改之间徘徊(我认为这是记录的行为)。我不得不重新创建一个具有不同名称的pod以获得干净的emptyDir并分配1200Mi的内存以使其全部启动。查看文档,我发现它是一个Java VM解决方案。
使用Java 8时,只使用以下2个运行时Java VM选项可以显着改进内存使用情况:
...“ - XX:+ UnlockExperimentalVMOptions”,“ - XX:+ UseCGroupMemoryLimitForHeap”......
我刚刚部署了容量超过650 MB RAM的容器(Spring Boot JAR)。只有这两个(新的)选项RAM消耗降至270 MB!
因此,通过这两个运行时设置,所有OOM都远远落后!请享用!