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