首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当另一个吊舱死亡时,从舱内的kubernetes接收警报信息。

当另一个吊舱死亡时,从舱内的kubernetes接收警报信息。
EN

Stack Overflow用户
提问于 2022-04-06 07:22:47
回答 1查看 112关注 0票数 3

设想情况:

我们有一个K8s (AKS)集群,其中包括运行一个.NET容器的3个副本。副本使用Redis锁访问共享资源。如果一个副本在保存锁时死亡,则锁不会释放,因此其他副本需要等到锁过期后才能继续操作。为了减少这个延迟,我们可以减少锁过期超时,但是如果锁太早过期,而持有者仍然在使用共享资源时,我们就会得到一个竞争条件。其他解决方案也是可能的(如续订锁租约等)。看上去已经足够强壮了。

有办法在吊舱死亡时从k8s引擎接收事件吗?

剩下的活副本将移除锁并继续其工作。没有过期问题(锁将永久创建,不需要扩展)

EN

回答 1

Stack Overflow用户

发布于 2022-04-06 10:24:53

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

代码语言:javascript
运行
复制
[...]
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"]'

来自文档

Kubernetes在容器终止之前立即发送preStop事件

编辑

关于崩溃吊舱,没有这样的工具,特别是没有收到.NET的细节。

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

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

想到的另一个解决方案是在吊舱中有一个侧面容器,定期检查主应用程序的健康状况。如果它死了,它会向其他舱发出信号。

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

https://stackoverflow.com/questions/71762604

复制
相关文章

相似问题

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