【问题标题】:openshift pod fails and restarts frequentlyopenshift pod 失败并频繁重启
【发布时间】:2016-06-15 03:21:08
【问题描述】:

我正在使用我的 Docker 映像在 Origin 3.1 中创建一个应用程序。

每当我创建图像时,都会创建新的 pod,但它会一次又一次地重新启动,最终状态为“CrashLoopBackOff”。

我分析了 pod 的日志,但它没有给出错误,所有日志数据都符合成功运行应用程序的预期。因此,无法确定原因。

我今天看到下面的链接,上面写着“以 root 身份在容器内运行应用程序仍然存在风险,OpenShift 默认不允许您这样做,而是以任意分配的用户 ID 运行。”

What is CrashLoopBackOff status for openshift pods?

这里我的图像仅使用 root 用户,如何才能使其工作?因为日志显示没有错误,但 pod 不断重启。

谁能帮帮我。

【问题讨论】:

  • 您是否对oc logs 使用了-p--previous 标志来查看上次尝试启动pod 的日志是否显示任何内容?在这种情况下仅查看最新可能不会导致您捕获问题。您的应用程序是否甚至会记录到标准输出以便捕获日志?

标签: kubernetes dockerfile openshift-origin openshift-enterprise


【解决方案1】:

您看到这一点是因为您的映像启动的任何进程都不是一个长时间运行的进程,并且找不到 TTY,并且容器只是退出并反复重新启动,就 openshift 而言,这是一个“崩溃循环”。

您的 dockerfile 在下面提到:

ENTRYPOINT [“容器入口点”]

这个“容器入口点”实际上在做什么?

你需要检查一下。

您是否使用 -p 或 --previous 标志来 oc 日志以查看上次尝试启动 pod 的日志是否显示任何内容

【讨论】:

  • 容器入口点是标准 OpenShift S2I 构建器的一部分。它所做的只是设置一些环境变量并可能激活 SCL 包,然后执行 CMD 定义的任何内容。这不应该是任何问题的根源。
  • 嗨@Jaspreet,感谢您的回复。实际上我正在运行一个 Play Java 应用程序。以下是 Dockerfile 的内容: ENTRYPOINT ["activator","start"] 我尝试使用 -p 查看日志,但没有显示任何错误。服务器启动正常,但立即退出并一次又一次地启动整个构建过程,最后崩溃。虽然相同的 Dockerfile 在 openshift 之外仅使用“docker run”就可以正常工作。知道 OpenShift 中可能存在什么问题吗?
【解决方案2】:

Red Hat 的recommendation 是让文件组归GID 0 拥有——容器中的用户总是在root 组中。您将无法 chown,但您可以有选择地公开要写入的文件。

第二种选择: 为了允许使用命名用户或 root (0) 用户的图像在 OpenShift 中构建,您可以将项目的构建器服务帐户 (system:serviceaccount::builder) 添加到特权安全上下文约束 (SCC) .或者,您可以允许所有图像以任何用户身份运行。

【讨论】:

  • 您好,感谢您的回复,修改 SCC 后,我可以从 Dockerfile 构建应用程序,该应用程序以 root 用户身份运行,但现在问题是容器会一次又一次地重新启动,而不会出现任何错误日志,最后显示“CrashloopBackOff”状态。如何在 openshift 中将容器作为守护进程运行?为什么会发生?对此的任何指示都会非常有帮助。再次感谢!
【解决方案3】:

你能用

查看日志吗
kubectl logs <podname> -p 

这应该会为您提供 pod 失败的错误。

【讨论】:

  • 嗨,谢谢,我使用 "openshift kube logs -p " 检查,但日志中没有错误,从昨天开始,我的容器已重新启动 218 次,没有抛出任何错误。你能帮我吗?再次感谢!
【解决方案4】:

我可以通过创建一个脚本作为“run.sh”来解决这个问题:

while :; do
sleep 300
done

在 Dockerfile 中:

ADD run.sh /run.sh
RUN chmod +x /*.sh
CMD ["/run.sh"]

这样就可以了,谢谢大家指出原因,这帮助我找到了解决方案。但是我仍然有一个疑问,为什么仅在这种情况下,进程会在 openshift 中退出,我尝试过以相同的方式运行 tomcat 服务器,而无需在脚本中休眠就可以正常工作。

【讨论】:

  • 当 OpenShift 终止您的进程时,它预计您的 run.sh 将终止,这将导致完全关闭。在这种情况下,您的实际运行进程可能会导致损坏,因为它可能无法完全关闭。这是特定于应用的,但当然值得考虑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多