【问题标题】:Kubernetes. How to avoid kubernetes to retry a request against other replicas?Kubernetes。如何避免 kubernetes 对其他副本重试请求?
【发布时间】:2017-06-19 20:32:01
【问题描述】:

我有一个运行 node.js 应用程序的图像。 在这个应用程序中,我有方法 /kill 可以杀死进程(“process.exit();”)。

我有一个包含三个运行上述图像的副本的部署。 我通过 NodePort 类型的服务公开部署。

当我对一个副本调用 /kill 时,它存在并且请求失败,然后 kubernetes 对其他副本重试请求并且所有副本都退出。

这是我的服务:

apiVersion: v1
kind: Service
metadata:
  name: hellokube-service
  labels:
    app: hellokube
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: hellokube

是否可以避免重试?

【问题讨论】:

  • 我怀疑它在这里会帮助你;但是你能试试 SessionAffinity 设置看看是否有帮助吗?
  • 感谢您的评论,“问题”是浏览器。

标签: kubernetes


【解决方案1】:

重试的不是 Kubernetes。是浏览器。

我的node.js方法实现是:

app.get("/kill", function(req, res, next){
    logger.info("Somebody kill me.");
    process.exit();
});

这是一个get,它什么也不返回。浏览器检测到与幂等操作的意外连接松动并重试该操作。 https://mnot.github.io/I-D/httpbis-retry/

如果我返回某些内容或将操作更改为 POST 操作,则不会发生。

我不知道这种浏览器行为。

如果您使用 curl 而不是浏览器调用原始操作,它不会重试。 SOAPUI 会重试。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2017-10-10
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多