【发布时间】:2019-07-19 12:00:35
【问题描述】:
我们在一个 pod 上监听多个邮箱,但是如果这个 pod 由于某种原因出现故障,则需要另一个正在运行的 pod 来监听这些邮箱。为了继续接收电子邮件。
我想知道是否有可能找到一个 pod 是否像事件一样发生故障并触发脚本在旅途中执行上述操作?
【问题讨论】:
我们在一个 pod 上监听多个邮箱,但是如果这个 pod 由于某种原因出现故障,则需要另一个正在运行的 pod 来监听这些邮箱。为了继续接收电子邮件。
我想知道是否有可能找到一个 pod 是否像事件一样发生故障并触发脚本在旅途中执行上述操作?
【问题讨论】:
方法一:
kubernetes 生命周期处理程序钩子
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]
https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
方法二:
编写一个脚本,每隔 x 秒监控一次的健康状况,当连续 3 次健康检查失败时,kubernetes 会删除 pod。因此,在您的脚本中,如果连续 3 次休息呼叫因健康而失败,则该吊舱将被删除。你可以触发你的事件。
方法3:
维护 2 个副本 => 问题可能是两个 pod 处理相同的邮件。如果你使用 kafka,你可以避免这种情况。
【讨论】: