发布于 2019-10-31 18:12:17
活性命令
您可以使用您所描述的活性命令。然而,我建议为Kubernetes设计你的工作/任务。
Kubernetes的设计
我的容器运行一个节点cron进程,它每12小时下载一次csv文件,解析它们并将结果插入elasticsearch中。
您的任务没有那么频繁地执行,如果您将其部署为一个服务,将一直占用资源--。当您编写希望在流程中使用pm2时,我将推荐另一种设计。据我所知,PM2是一个过程管理器,但是Kubernetes在某种程度上也是一个过程管理器。
Kubernetes天然CronJob
而不是用pm2处理进程,而是将 process 实现为容器映像,并在Kubernetes CronJob中在jobTemplate中指定图像来调度作业/任务。使用此设计,您没有任何livenessProbe,但是如果任务失败,任务将重新启动,例如,由于网络问题,无法将结果插入到elasticSearch。
发布于 2019-10-31 17:47:11
首先,您当然应该考虑为这个工作负载设置一个Kubernetes CronJob。也就是说,它可能不适合您的作业,例如,如果您的作业在计划运行之间占用了大部分时间,或者您需要在作业中的错误处理和调度之间进行更复杂的交互。最后,如果您想要检查作业在运行时是否取得了进展,甚至可能希望为CronJob生成的容器运行一个活动探测--这使用了与正常作业相同的语法。
我不太熟悉pm2,虽然我不认为您应该使用Kubernetes内部的附加作业管理,它应该已经提供了您所需要的大部分内容。
这就是说,当然可以为您的活动探测使用任意命令,而且正如您所注意到的,它甚至在kubernetes活性/红色探针文献中显式地涵盖了。
只需将一个exec成员添加到容器的livenessProbe节中,如下所示:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5如果命令返回0(例如,成功),那么kubelet认为容器是活的和健康的。(例如,在这个简单的例子中,容器只有在/tmp/healthy存在时才被认为是健康的)。
在你的例子中,我可以想到几种使用的可能性。例如,作业可能被配置为删除一个哨兵文件,该哨兵文件表明它正在以某种方式取得进展。例如,附加上一个复制文件的名称和时间戳。活动命令将是一个小脚本,它可以读取该文件并确保已经取得了足够的进展(例如,在cron作业中,文件在最后几分钟内就被复制了)。
准备状态探测在您描述的服务上下文中可能没有意义,因为它们更多的是关于不发送应用程序流量,但它们也可以有类似的节,仅用于readinessProbe而不是livenessProbe。
https://stackoverflow.com/questions/58648639
复制相似问题