我最近一直在试验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是健康的,并在那里发送请求(但由于流程尚未启动而无法返回?)
答案 0 :(得分:7)
我提出了一个问题来记录推荐的做法。我在这个问题上写了一个方法草图:
https://github.com/kubernetes/kubernetes/issues/20473
容器重启,特别是当它们拉动图像时,系统相当昂贵。 Kubelet支持重新启动崩溃的容器,以便使用DOSing docker,注册表,apiserver等优雅地降级。