2016-04-09 5 views
0

Ich möchte einen bestimmten, genau ausgewählten Pod aus einer Reihe von Pods entfernen, die von demselben Replication Controller oder demselben Replica Set gesteuert werden.
Der Anwendungsfall ist der folgende: Jeder Pod im Satz führt eine stateful (aber im Speicher) Anwendung aus. Ich möchte einen Pod auf eine elegante Weise aus dem Set entfernen, d. H. Vor der Entfernung, von der ich sicher sein möchte, dass keine laufenden Anwendungssitzungen vom Pod gehandhabt werden. Nehmen wir an, ich kann die Aufgabe lösen, den Pod auf Anwendungsebene zu leeren, d. H. Es werden keine neuen Sitzungen an den ausgewählten Pod gerichtet, und ich kann die Anzahl der laufenden Sitzungen im Pod messen, sodass ich entscheiden kann, wann der Pod entfernt werden soll. Der schwierige Teil besteht darin, diesen Pod so zu entfernen, dass RC oder RS ​​den Pod nicht durch einen neuen ersetzen, der auf dem Wert von "Replikaten" basiert.
Ich konnte keine Lösung dafür finden. Der nächste wäre, den Pod von der RC oder RS ​​zu isolieren, wie von http://kubernetes.io/docs/user-guide/replication-controller/#isolating-pods-from-a-replication-controller vorgeschlagen. Allerdings ersetzt der RC oder RS ​​den isolierten Pod durch einen neuen, nach demselben Dokument. Und ich kann verstehen, dass es keine Möglichkeit gibt, die Kapsel zu isolieren und den Wert von "Replikaten" auf atomarer Weise zu verringern.
Ich habe die kommende PetSet-Unterstützung überprüft, aber meine Anwendung erfordert z. persistenter Speicher oder persistente Pod-ID. Solche Features sind in meinem Fall nicht notwendig, daher ist meine Anwendung aus dieser Perspektive nicht wirklich ein Haustier.
Vielleicht würde ein neuer Pod-Zustand (zB "target for removal" - Statusname ist für mich nicht wichtig) es schaffen, der über die API gepatcht werden könnte, und welcher von RC oder RS ​​berücksichtigt werden würde, wenn der Wert von "replicas "ist verringert?Graceful shutdown des explizit ausgewählten Pods

Antwort

1

Sie können dies in drei Schritten erreicht werden:

  1. ein Label hinzufügen alle Schoten außer die, die Sie löschen möchten. Da die Beschriftungen der Pods immer noch die Auswahl des Replikat-Sets erfüllen, werden keine neuen Pods erstellt.

  2. Aktualisieren des Replikatsatzes: Hinzufügen des neuen Etiketts zum Selektor und automatisches Reduzieren der Replikate des Replikatsatzes. Der Pod, den Sie löschen möchten, wird nicht vom Replikat-Set ausgewählt, da er nicht über das neue Label verfügt.

  3. Löschen Sie den ausgewählten Pod.

+0

Danke! Und ich nehme an, um es wiederholbar zu machen, sollte ich das zusätzliche Etikett aus dem RS als vierten Schritt entfernen und dann aus allen Pods als fünften Schritt. Ich bin etwas besorgt über die fehlende atomare Natur dieses Verfahrens, aber in der Tat würde es in einem sonnigen Fall funktionieren. Vielen Dank! – janosi

+0

Ja, die 4. und 5. Schritte machen Sinn :) – caesarxuchao