2016-02-03 7 views
5

Eine Kubernetes LoadBalancer wird sofort zurückgegeben (zB kubectl create -f ... oder kubectl expose svc NAME --name=load-balancer --port=80 --type=LoadBalancer).Warten, bis Kubernetes einem LoadBalancer-Dienst eine externe IP-Adresse zugewiesen hat?

Ich weiß, eine manuelle Art und Weise in der Schale warten:

external_ip="" 
while [ -z $external_ip ]; do 
    sleep 10 
    external_ip=$(kubectl get svc load-balancer --template="{{range .status.loadBalancer.ingress}}{{.ip}}{{end}}") 
done 

Dies ist jedoch nicht ideal ist:

  • Benötigt mindestens 5 Zeilen Bash-Skript.
  • Unendliche Wartezeit auch im Fehlerfall (ansonsten ist eine Zeitüberschreitung erforderlich, die die Anzahl der Zeilen erhöht).
  • Wahrscheinlich nicht effizient; könnte --wait oder --wait-once verwenden, aber mit diesen Befehl wird nie zurückgegeben.

Gibt es eine bessere Art und Weise, bis ein Service externe IP zu warten (aka LoadBalancer Ingress IP) gesetzt ist oder nicht gesetzt?

Antwort

1

Es gibt nicht wirklich eine "nicht gesetzt" Bedingung, weil wir es für immer wiederholen werden. Ein Fehler kann ein vorübergehender Fehler im Cloud-Anbieter oder ein Kontingentproblem sein, das im Laufe von Stunden oder Tagen oder einer beliebigen Anzahl von Problemen behoben wird. Der einzige Fehler kommt von "wie lange bist du bereit zu warten?" - was nur du wissen kannst.

Wir haben keinen allgemeinen "Warte auf Ausdruck" -Befehl, weil er willkürlich komplex ist und Sie besser dran sind, nur das in einer echten Sprache zu programmieren. Ergo die Bash Schleife oben. Wir könnten es besser machen, einen 'Watch'-Befehl zu haben, aber am Ende ist es immer noch ein Timeout.

+0

Konnte es wie eine Wartezeit für X Sekunden dauern, bis bereit oder scheitern? – Wernight

+0

Was bedeutet "fehlgeschlagen"? Dass das Gesamtsystem aufhören wird zu versuchen? Warum? Sollte es dann den Service als ausgefallen markieren? Mir ist nicht klar, was Sie erreichen wollen - ist es nicht bekannt, ob die Umgebung tatsächlich LB unterstützt? Oder dass Sie einen Ausfall eines Cloud-Anbieters erwarten? Egal - Sie haben einen Weg, es schon zu tun, Sie mögen einfach nicht loopen :) –

+0

fail bedeutet Ausgang 1, wenn keine externe IP innerhalb von X Sekunden zugewiesen wurde. Ja, ich möchte kein Skript zur Bereitstellung erstellen. Die Bereitstellung sollte so einfach wie möglich sein, um Fehler in meinem Skript zu vermeiden, die ernsthaften Schaden anrichten, da ein Skript pro Projekt sehr viel häufiger Fehler aufweist als ein gewöhnliches Skript/Feature für alle Kuberentes-Projekte. – Wernight