2017-06-18 1 views
1

Ich habe ein Bild mit einer node.js-Anwendung. In dieser Anwendung habe ich die Methode/kill, die den Prozess beenden ("process.exit();").Kubernetes. Wie kann man verhindern, dass Kubernetes eine Anfrage gegen andere Replikate wiederholt?

Ich habe eine Bereitstellung mit drei Replikaten, die das obige Bild ausführen. Ich mache die Bereitstellung über einen Dienst vom Typ NodePort verfügbar.

Wenn ich das/kill gegen ein Replikat anruft existiert es und die Anfrage fehlschlägt dann kubernetes wiederholen Sie die Anfrage gegen die anderen Replikate und alle von ihnen beenden.

Das ist mein Service:

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

Ist es möglich, diesen erneuten Versuch zu vermeiden?

+0

Ich bezweifle, dass es dir hier helfen wird; aber könnten Sie versuchen, SessionAffinity Einstellung zu sehen, ob es hilft? –

+0

Vielen Dank für den Kommentar, das "Problem" war der Browser. – Jxadro

Antwort

1

Es war nicht Kubernetes, der sich versuchte. Es war der Browser.

Meine node.js Methode Implementierung ist:

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

Es ist ein get und es gibt nichts zurück. Der Browser erkennt eine unerwartete Verbindung mit einer idempotenten Operation und versucht die Operation erneut. https://mnot.github.io/I-D/httpbis-retry/

Wenn ich etwas zurückgebe oder den Vorgang in einen POST-Vorgang umwandle, passiert das nicht.

Ich wusste nicht über dieses Browserverhalten.

Wenn Sie die ursprüngliche Operation mit curl anstelle eines Browsers aufrufen, wird dies nicht wiederholt. SOAPUI versucht es erneut.

Verwandte Themen