簡體   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