首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为非服务器的node.js容器创建liveness探头?

如何为非服务器的node.js容器创建liveness探头?
EN

Stack Overflow用户
提问于 2019-10-31 17:37:17
回答 2查看 3K关注 0票数 4

我必须为kubernetes中的node.js容器(docker)创建一个就绪性和活性探针。我的问题是容器不是服务器,所以我不能使用http请求来查看它是否处于活动状态。

我的容器运行一个节点-cron进程,每12小时下载一些csv文件,解析它们并在elasticsearch中插入结果。

我知道我可以添加express.js,但我不想仅仅为了探针而这么做。

我的问题是:

  1. 有什么方法可以使用某种活性命令探针吗?如果可能的话,我可以使用什么命令?
  2. 在容器中,我让pm2运行进程。我可以以任何方式使用它作为我的探测器,如果是的话,如何使用?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-31 18:12:17

活性命令

您可以使用您所描述的活性命令。然而,我建议为Kubernetes设计你的工作/任务。

Kubernetes的设计

我的容器运行一个节点cron进程,它每12小时下载一次csv文件,解析它们并将结果插入elasticsearch中。

您的任务没有那么频繁地执行,如果您将其部署为一个服务,将一直占用资源--。当您编写希望在流程中使用pm2时,我将推荐另一种设计。据我所知,PM2是一个过程管理器,但是Kubernetes在某种程度上也是一个过程管理器。

Kubernetes天然CronJob

而不是用pm2处理进程,而是将 process 实现为容器映像,并在Kubernetes CronJob中在jobTemplate中指定图像来调度作业/任务。使用此设计,您没有任何livenessProbe,但是如果任务失败,任务将重新启动,例如,由于网络问题,无法将结果插入到elasticSearch。

票数 3
EN

Stack Overflow用户

发布于 2019-10-31 17:47:11

首先,您当然应该考虑为这个工作负载设置一个Kubernetes CronJob。也就是说,它可能不适合您的作业,例如,如果您的作业在计划运行之间占用了大部分时间,或者您需要在作业中的错误处理和调度之间进行更复杂的交互。最后,如果您想要检查作业在运行时是否取得了进展,甚至可能希望为CronJob生成的容器运行一个活动探测--这使用了与正常作业相同的语法。

我不太熟悉pm2,虽然我不认为您应该使用Kubernetes内部的附加作业管理,它应该已经提供了您所需要的大部分内容。

这就是说,当然可以为您的活动探测使用任意命令,而且正如您所注意到的,它甚至在kubernetes活性/红色探针文献中显式地涵盖了。

只需将一个exec成员添加到容器的livenessProbe节中,如下所示:

代码语言:javascript
复制
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

如果命令返回0(例如,成功),那么kubelet认为容器是活的和健康的。(例如,在这个简单的例子中,容器只有在/tmp/healthy存在时才被认为是健康的)。

在你的例子中,我可以想到几种使用的可能性。例如,作业可能被配置为删除一个哨兵文件,该哨兵文件表明它正在以某种方式取得进展。例如,附加上一个复制文件的名称和时间戳。活动命令将是一个小脚本,它可以读取该文件并确保已经取得了足够的进展(例如,在cron作业中,文件在最后几分钟内就被复制了)。

准备状态探测在您描述的服务上下文中可能没有意义,因为它们更多的是关于不发送应用程序流量,但它们也可以有类似的节,仅用于readinessProbe而不是livenessProbe

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58648639

复制
相关文章

相似问题

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