首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生命周期钩子错误137失败

生命周期钩子错误137失败
EN

Stack Overflow用户
提问于 2018-04-06 15:29:45
回答 1查看 2.4K关注 0票数 2

我正在启动乔布斯,我试图使用生命周期挂钩在开始时启动一个脚本,在容器关闭时启动另一个脚本。

我还指定了资源限制,它们如下所示:

代码语言:javascript
复制
resources:
    required:
        memory: 1Gi
        cpu: 1
    limits:
        memory: 1Gi
        cpu: 1

我的集群目前有4节点,每个有一个CPU和4GB内存,并且运行在EC2机器上。

postStart脚本目前非常简单,如下所示:

代码语言:javascript
复制
export SOME_VAR=some_value
node someScript.js

Node脚本所做的唯一事情就是更新数据库上的值,所以它不是一个特别密集的任务。

启动作业后,会发生下列事件:

如您所见,postStart钩子在出现错误137时会失败,并且不会给出错误消息。

解决这一问题的任何帮助都是受到高度欢迎和赞赏的。

编辑1

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

我是这样指定lifecycle指令的:

代码语言:javascript
复制
"lifecycle": {
    "postStart": {
        "exec": {
            "command": [
                "/bin/sh",
                "postStart.sh"
             ]
        }
    },
    "preStop": {
        "exec": {
            "command": [
                "/bin/sh",
                "preStop.sh"
            ]
        }
    }
}

我认为这是翻译成YAML的方式,它应该;请纠正我,如果我是错误的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-09 16:07:18

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

问题1: cpu要求过高

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

错误消息No nodes are available that match all of the predicates: Insufficient cpu (4), PodToleratesNodeTaints (1)意味着:

  • 目前不可能安排时间。
  • 在所有节点中,有4个没有足够的cpu来调度这个吊舱。
    • 您可以通过执行kubectl describe node nameofyournode来验证这一点,并查看输出的Allocatable:Allocated resources:部分。在Non-terminated Pods:中,您将看到这占用了您的一些cpu,可能是一个kube荚。

  • 在所有节点中,有一个不是污点耐住 (我想这就是主节点)。

解决方案是降低对吊舱的要求(500mi是指500毫升,或0.5内核):

代码语言:javascript
复制
resources:
  required:
    memory: 1Gi
    cpu: 500mi
  limits:
    memory: 1Gi
    cpu: 500mi

..。或者调整你的机器的大小,这样它们就有两个核心而不是一个。

问题2:错误的postStart命令

现在最奇怪的是,不知何故,豆荚最终被安排好了,但后来被杀了。代码126表示Command invoked cannot execute,因此postStart:命令可能无效。您没有发布完整的yaml文件,但是从错误消息看,您似乎指定了如下内容:

代码语言:javascript
复制
lifecycle:
  postStart:
    exec:
      command: ["/bin/sh postStart.sh"]

请检查一下是否是这样的。如果是这样的话,那是不正确的。您需要将每个参数分离为command数组中的不同元素,如下所示:

代码语言:javascript
复制
lifecycle:
  postStart:
    exec:
      command: ["/bin/sh", "postStart.sh"]

或者,确保postStart.sh在容器映像中被标记为可执行文件,并在第一行(#!/bin/bash)中指定一个外壳。如果这样做,您可以像这样定义postStart钩子:

代码语言:javascript
复制
lifecycle:
  postStart:
    exec:
      command: ["/path/to/postStart.sh"]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49696247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档