如何为 kubernetes pod 终止实现自定义逻辑?

How to implement custom logic for kubernetes pod termination?

我有一个有状态的 pod(处理来自 IVR 的 phone 呼叫),因此,执行更新或让 HPA 执行 pod 终止可能会导致 phone 呼叫中断。我可以将 terminationGracePeriodSeconds 延长到 10 分钟之类的大值,但如果没有 phone 呼叫通过此 pod,我不想将其延长那么远。

是否有某种方法可以通过 rest 端点查询 pod 以验证有多少 phone 调用处于活动状态?我想快速终止 pod,但如果它仍有正在进行的对话,也想扩展它。

一些可能相关的细节:

您可以使用 preStop 处理程序,请参阅 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/

假设您的 /calls 端点 returns 当前通话次数,您可以这样做,每 5 秒查询一次此端点,直到通话次数为零

  containers:
  - name: your container
    # . . . 
    lifecycle:
      preStop:
        exec:
          command: ["/bin/bash","-c","while [ \"$(curl localhost/calls)\" != '0' ]; do echo 'there are active calls'; sleep 5; done; echo 'no active calls, exiting'; exit 0" ]

这需要 curl 出现在你的图像中,你可能还想将 stderr 重定向到 /dev/null and/or 添加其他故障保护,但应该足以证明概念