下一代 OpenShift Online "Unable to mount volumes for pod"

OpenShift Online Next Gen "Unable to mount volumes for pod"

我尝试在 OpenShift Online Next Gen 中使用常规 EBS 持久存储卷,但在尝试部署时出现以下错误:

    Unable to mount volumes for pod "production-5-vpxpw_instanttabletop(d784f054-a66b-11e7-a41e-0ab8769191d3)": timeout expired waiting for volumes to attach/mount for pod "instanttabletop"/"production-5-vpxpw". list of unattached/unmounted volumes=[volume-mondv]

随后(一段时间后)出现了以下的多个实例:

    Failed to attach volume "pvc-702876a2-a663-11e7-8348-0a69cdf75e6f" on node "ip-172-31-61-152.us-west-2.compute.internal" with: Error attaching EBS volume "vol-0fb5515c87914b844" to instance "i-08d3313801027fbc3": VolumeInUse: vol-0fb5515c87914b844 is already attached to an instance status code: 400, request id: 54dd24cc-6ab0-434d-85c3-f0f063e73099

部署 pod 的日志在全部超时后如下所示:

    --> Scaling production-5 to 1
    --> Waiting up to 10m0s for pods in rc production-5 to become ready
    W1001 05:53:28.496345       1 reflector.go:323] github.com/openshift/origin/pkg/deploy/strategy/support/lifecycle.go:509: watch of *api.Pod ended with: too old resource version: 1455045195 (1455062250)
    error: update acceptor rejected production-5: pods for rc "production-5" took longer than 600 seconds to become ready

起初我认为这可能与 this issue 有关,但唯一的 运行ning pods 是部署和试图启动的那个,我已经按照那里的建议切换到 Recreate 策略,但没有结果。

第一次确实部署了,运行 正常,但从那以后我就没能成功部署它。

任何人都可以阐明我在这里做错了什么吗?

更新#1:

作为一个额外的问题,有时当我部署它时似乎需要很长时间才能启动部署 pods(我实际上不知道它 应该多长时间 接受,但我收到一条警告,提示事情进展缓慢,而我目前的部署到目前为止已经超过 15 分钟了,还没有站起来)。

在部署 pod 的事件列表中,我在等待时看到了 Error syncing podPod sandbox changed, it will be killed and re-created. 中的多个实例,但什么也没触及。

不是每次都这样,我也没有看出规律。

不确定这是否相关,但似乎值得一提。

更新#2:

我今天早上再次尝试部署,在取消一次遇到上述第一次更新中描述的问题的部署后,一切都成功了。

据我所知,我没有做任何更改,所以我对这里的问题是什么感到困惑。我会进一步更新问题是否再次出现。

更新 #3

经过一系列进一步的实验,我现在似乎能够定期启动和 运行ning 我的 pod。我没有对配置进行任何更改,所以我认为这与排序有关,但即使是现在也并非没有一些违规行为:

如果我开始部署,根据控制台,现有的 运行ning pod 会无限期挂起在 terminating 状态,并且会保持这种状态直到它被硬删除(无需等待它删除)优雅地关闭)。在此之前,它将继续产生上述错误(如您所料)。

坦率地说,与我昨晚遇到的问题相比,这对我来说没有意义 - 我有 没有 其他 pods 运行当我之前遇到这些错误时 ning - 但至少它以某种形式取得了进展。

一旦我的服务器实际启动并 运行ning(请求未到达服务器,以及尝试升级到 websocket 连接时出现问题),我遇到了一些其他问题,但这些几乎可以肯定分开,所以我会把它们留到另一个问题,除非有人告诉我它们实际上是相关的。

更新 #4

OpenShift 的持续问题列表没有改变,但现在似乎加载正确,因此将其标记为已解决并继续处理其他问题。

为了后代,从 Rolling 更改为 Recreate 是这里的关键,即便如此,如果旧 pod 在尝试正常关闭时卡住,您可能需要手动杀死它。

该错误清楚地表明该卷已附加到其他某个 运行 实例。

VolumeInUse: vol-0fb5515c87914b844 is already attached to an instance status code: 400, request id: 54dd24cc-6ab0-434d-85c3-f0f063e73099

您必须通过以下任一方式进行清理:

1) 从 运行 实例中取消附加卷并重新附加。小心数据,因为 EBS 卷的生命周期仅限于 pod 生命周期。

2) 在为新构建创建另一个部署之前,确保较早的 运行 容器实例已被终止(通过删除容器实例)。

您不能将 OpenShift Online 中的持久卷用于部署策略设置为 'Rolling' 的应用程序。编辑部署配置并确保部署策略设置为 'Recreate'.

您说您使用了 'replace'。如果您通过编辑部署配置的 JSON/YAML 将其设置为该值,则值更改将被丢弃,因为 'replace' 不是有效选项。