快速重新启动广告连播

时间:2015-12-18 22:31:57

标签: kubernetes

我最近一直在试验kubernetes,我一直试图通过一个复制控制器测试pod中的故障转移,其中容器在使用时就会崩溃(从而导致重启)。

我已经为此调整了bashttpd项目: https://github.com/Chronojam/bashttpd

(在我设置的位置,以便它提供容器的主机名,然后退出)

这很好用,除了重启对于我要做的事情来说要慢得多,因为它适用于前几个请求,然后停止一段时间 - 然后在重新启动pod时再次开始工作。 (理想情况下,在访问服务时看起来没有任何中断)。

我认为(但不确定)这里提到的备份延迟应该归咎于: https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/pod-states.md#restartpolicy

一些输出:

#] kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
chronojam-blog-a23ak         1/1       Running   0          6h
chronojam-blog-abhh7         1/1       Running   0          6h
chronojam-serve-once-1cwmb   1/1       Running   7          4h
chronojam-serve-once-46jck   1/1       Running   7          4h
chronojam-serve-once-j8uyc   1/1       Running   3          4h
chronojam-serve-once-r8pi4   1/1       Running   7          4h
chronojam-serve-once-xhbkd   1/1       Running   4          4h
chronojam-serve-once-yb9hc   1/1       Running   7          4h
chronojam-tactics-is1go      1/1       Running   0          5h
chronojam-tactics-tqm8c      1/1       Running   0          5h
#] curl http://serve-once.chronojam.co.uk
<h3> chronojam-serve-once-j8uyc </h3>
#] curl http://serve-once.chronojam.co.uk
<h3> chronojam-serve-once-r8pi4 </h3>
#] curl http://serve-once.chronojam.co.uk
<h3> chronojam-serve-once-yb9hc </h3>
#] curl http://serve-once.chronojam.co.uk
<h3> chronojam-serve-once-46jck </h3>
#] curl http://serve-once.chronojam.co.uk
#] curl http://serve-once.chronojam.co.uk

你还会注意到即使那里应该有2个仍然健康的豆荚,它会在第4天后停止返回。

所以我的问题有两个:

1)

我可以调整退避延迟吗?

2)

为什么我的服务不会将我的请求发送到健康容器?

观察:

我认为可能是网络服务器本身无法快速开始提供请求,因此kubernetes认为这些pod是健康的,并在那里发送请求(但由于流程尚未启动而无法返回?)

1 个答案:

答案 0 :(得分:7)

我提出了一个问题来记录推荐的做法。我在这个问题上写了一个方法草图:

https://github.com/kubernetes/kubernetes/issues/20473

  • 确保pod具有非零的terminationGracePeriodSeconds设置
  • 在pod的主要服务容器上配置readinessProbe
  • 处理应用程序中的SIGTERM:使readinessProbe失败但继续*处理正常请求而不退出
  • 将maxUnavailable和/或maxSurge设置得足够大,以确保Deployment API规范中有足够的服务实例(1.2中提供)

容器重启,特别是当它们拉动图像时,系统相当昂贵。 Kubelet支持重新启动崩溃的容器,以便使用DOSing docker,注册表,apiserver等优雅地降级。