我有一个运行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

是否可以避免重试?

最佳答案

重试的不是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会重试。

关于kubernetes - Kubernetes。如何避免kubernetes对其他副本重试请求?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44618732/

10-16 13:56