gpt4 book ai didi

amazon-web-services - 生命周期 Hook 失败并出现错误 137

转载 作者:行者123 更新时间:2023-12-02 11:41:06 24 4
gpt4 key购买 nike

我正在启 Action 业,我正在尝试使用生命周期 Hook 在启动时启动一个脚本,在容器关闭时启动另一个脚本。

我还指定了资源限制,它们看起来像这样:

resources:
required:
memory: 1Gi
cpu: 1
limits:
memory: 1Gi
cpu: 1

我的集群目前有 4 个节点,每个节点有 1 个 CPU 和 4 GB RAM ,并且在 EC2 机器上运行。
postStart脚本目前非常简单,如下所示:
export SOME_VAR=some_value
node someScript.js

Node 脚本所做的唯一一件事就是更新数据库中的值,因此这不是一项特别密集的任务。

启 Action 业后,会发生以下事件:

Kubectl Events

如您所见 postStart钩子(Hook)失败并出现错误 137,并且没有给出错误消息。

任何解决此问题的帮助都非常受欢迎和赞赏。

编辑 1

由于第一个答案指出可能没有正确构建为厨师执行的命令,我认为重要的是说我使用 Kubernetes 通过 kubectl proxy 发布的 API 构建作业。 .

这就是我指定 lifecycle 的方式指示:
"lifecycle": {
"postStart": {
"exec": {
"command": [
"/bin/sh",
"postStart.sh"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"preStop.sh"
]
}
}
}

我认为这会以应有的方式转化为 YAML;如果我错了,请纠正我。

最佳答案

你有 2 个问题,所以你得到 2 个答案:-)

问题一:cpu要求太高

您的 pod 指定了 cpu: 1 的要求- 这意味着 1 个 cpu 核心。您的节点总共有 1 个 cpu 核心,但已经在运行一些 pod,例如 kube-proxy。因此,它们都没有可用于您的应用程序的完整内核,因此调度失败。

错误信息 No nodes are available that match all of the predicates: Insufficient cpu (4), PodToleratesNodeTaints (1)方法:

  • 暂时无法安排
  • 在所有节点中,有 4 个没有足够的 cpu 来调度这个 pod。
  • 您可以通过执行 kubectl describe node nameofyournode 来验证这一点,然后查看 Allocatable:Allocated resources:输出的一部分。在 Non-terminated Pods:你会看到它占用了你的一些 cpu,可能是一个 kube-proxy pod。
  • 在所有节点中,1 个具有 taint那不是tolerated通过 pods (这是我想象的主人)

  • 解决方案是降低对 pod 的要求( 500mi 表示 500 毫核或 0.5 核):
    resources:
    required:
    memory: 1Gi
    cpu: 500mi
    limits:
    memory: 1Gi
    cpu: 500mi

    ...或调整您的机器大小,使它们有 2 个内核而不是 1 个。

    问题 2:错误的 postStart 命令

    现在最奇怪的是,不知何故, pods 最终确实被安排了,但随后被杀死。代码 126 表示 Command invoked cannot execute ,所以 postStart:命令可能无效。您没有发布完整的 yaml 文件,但从错误消息看来,您指定了以下内容:
    lifecycle:
    postStart:
    exec:
    command: ["/bin/sh postStart.sh"]

    请检查是否是这种情况。如果是这样,那是不正确的。您需要将每个参数分隔到 command 中的不同元素中。像这样的数组:
    lifecycle:
    postStart:
    exec:
    command: ["/bin/sh", "postStart.sh"]

    或者,确保 postStart.sh在容器镜像中被标记为可执行,并在第一行( #!/bin/bash )中指定 shell shebang。如果你这样做,你可以像这样定义 postStart 钩子(Hook):
    lifecycle:
    postStart:
    exec:
    command: ["/path/to/postStart.sh"]

    关于amazon-web-services - 生命周期 Hook 失败并出现错误 137,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49696247/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com