繁体   English   中英

当另一个 pod 挂掉时,在一个 pod 中接收来自 kube.netes 的警报消息

[英]Receive alert messages from kubernetes in a pod when another pod dies

设想:

我们有一个 K8s (AKS) 集群,其部署包括 3 个运行 .NET 容器的副本。 副本使用 Redis 锁访问共享资源。 如果一个副本在持有锁时死亡,则锁不会被释放,因此其他副本需要等到锁过期才能继续。 为了减少这种延迟,我们可以减少锁过期超时,但如果锁过早过期,而持有者仍在使用共享资源,我们就会出现竞争条件。 其他解决方案是可能的(如更新锁租约等)似乎不够稳健。

当 pod 死亡时,有没有办法从 k8s 引擎接收事件?

其余的活动副本然后将解除锁定并 go 继续他们的工作。 没有过期问题(锁将被创建为持久的,没有过期)

最简单的解决方案可能是添加一个lifecycle.preStop步骤,在该步骤中释放锁定文件或向其他容器发出信号。 像这样:

[...]
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh","-c","echo free > /tmp/lockfile"]

command: ["/bin/sh","-c","curl -X POST -F 'status=free' http://<service-name>:8080/lock"]'

来自文档

Kube.netes 在容器终止之前立即发送 preStop 事件

编辑

关于崩溃的 pod,没有相应的工具,尤其是不接收 .NET 细节。

您可以观察容器崩溃,它们作为事件发布,运行kubectl get events 所以有一个不同的方法:

您可以使用Kube.netes C# 客户端来监视这些事件。 最干净的解决方案是让第二个应用程序在同一个名称空间中运行,该名称空间解析事件并向其他应用程序发出一个已死亡的信号。

想到的另一个解决方案是在 pod 中有一个 sidecar 容器,它会定期检查主应用程序的运行状况。 如果它死了,它可以向其他吊舱发送信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM