Kubernetes 吊舱重启时的竞争条件
当其他POD通过服务(使用ClusterIP)连接到POD时,我们在重新启动POD时遇到了一个较小的问题。当pod宕机时,会有一个很小的时间跨度(~200ms),其中一些客户端请求会失败,因为它们仍然试图连接到刚刚宕机的pod。这会导致一些“连接被拒绝”错误。我们可以通过添加一个可休眠一秒钟的预停止挂钩来避免它。不幸的是,在每次部署中都这样做是很难看的 这可能是一个已知的问题吗?你知道怎么解决这个问题吗 对我来说,这看起来像某种竞赛条件(即pod在从其端点正确注销之前就消失了) 我们正在使用Kubernetes v1.5.3 这就是解决方案的外观(简化): 事实上,这说明了这个问题。它开始关闭进程,同时删除端点。因此,它可能已经在端点注册之前关闭了。我发现了一个说法,一个常见的陷阱可能就是您的情况: 假设Dockerfile以shell形式的CMD结尾: CMD myapp shell表单使用/bin/sh-cmyapp运行命令,因此 这将得到SIGTERM实际上是/bin/sh,而不是它的子myapp。 根据您正在运行的实际shell,它可以运行也可以不运行 把信号传给孩子们 可能是您的应用程序被暴力杀死,导致~200毫秒的连接失败。也许可以尝试一下文章中建议的选项?我发现一个说法是一个常见的陷阱,可能就是你的情况: 假设Dockerfile以shell形式的CMD结尾: CMD myapp shell表单使用/bin/sh-cmyapp运行命令,因此 这将得到SIGTERM实际上是/bin/sh,而不是它的子myapp。 根据您正在运行的实际shell,它可以运行也可以不运行 把信号传给孩子们Kubernetes 吊舱重启时的竞争条件,kubernetes,Kubernetes,当其他POD通过服务(使用ClusterIP)连接到POD时,我们在重新启动POD时遇到了一个较小的问题。当pod宕机时,会有一个很小的时间跨度(~200ms),其中一些客户端请求会失败,因为它们仍然试图连接到刚刚宕机的pod。这会导致一些“连接被拒绝”错误。我们可以通过添加一个可休眠一秒钟的预停止挂钩来避免它。不幸的是,在每次部署中都这样做是很难看的 这可能是一个已知的问题吗?你知道怎么解决这个问题吗 对我来说,这看起来像某种竞赛条件(即pod在从其端点正确注销之前就消失了) 我们正在使用Ku
可能是您的应用程序被暴力杀死,导致~200毫秒的连接失败。也许可以尝试文章中建议的选项?我们的环境并非如此。我们已经对没有任何中间shell过程非常挑剔了。我们的环境并非如此。我们已经对没有任何中间外壳工艺非常挑剔了。
apiVersion: apps/v1beta1
kind: StatefulSet
spec:
template:
spec:
containers:
- name: solr
lifecycle:
preStop:
exec:
command:
- /bin/sleep
- "1"