使用Kubernetes从Dropwizard应用程序中优雅地排空会话

时间:2016-04-19 15:01:39

标签: kubernetes dropwizard

我有一个Dropwizard应用程序,它在内存中保存短暂的会话(电话)。这有很好的理由,我们不会在短期内改变这种模式。

我们很快就会成立Kubernetes,我想知道处理停机/滚动更新的最佳方法是什么。该过程需要如下所示:

  1. 从负载均衡器中删除DW节点,因此无法在此节点上启动新会话。
  2. 等待所有剩余的会话完成。这应该需要几分钟。
  3. 终止进程/容器。
  4. 如果我做了第2步" preStop hook"看起来kubernetes可以处理这个问题。 http://kubernetes.io/docs/user-guide/pods/#termination-of-pods

    我的问题是,preStop钩子实际上会是什么样子?我应该设置DW"任务" (http://www.dropwizard.io/0.9.2/docs/manual/core.html#tasks)等待所有会话完成并从kubernetes CURL它?我应该放一个bash脚本来轮询一些sessionCount服务,直到没有任何一个在DW应用程序的docker容器中,并执行它?

1 个答案:

答案 0 :(得分:1)

假设您使用preStop挂钩,并且已发出pod删除请求。

  1. API服务器处理删除请求并修改pod对象。
  2. 端点控制器观察更改并从端点列表中删除pod。
  3. 在节点上,SIGTERM信号将发送到您的容器/进程。
  4. 您的进程应该捕获信号并消耗所有现有请求。请注意,此步骤不应超过您的pod规范中定义的定义的TerminationGracePeriod。
  5. 或者,您可以使用preStop挂钩阻塞,直到所有请求都耗尽。最有可能的是,你需要一个脚本来完成这个任务。