2016-02-03 10 views
5

Utworzenie zwraca natychmiast (np. kubectl create -f ... lub kubectl expose svc NAME --name=load-balancer --port=80 --type=LoadBalancer).Jak poczekać, aż Kubernetes przydzieli zewnętrzny adres IP do usługi LoadBalancer?

wiem ręczny sposób, aby czekać w skorupkach:

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

To jednak nie jest idealny:

  • Wymaga co najmniej 5 linii atakujących skryptów.
  • Nieskończone oczekiwanie nawet w przypadku błędu (w innym przypadku wymagany jest limit czasu, który zwiększa liczbę wierszy).
  • Prawdopodobnie nie jest wydajna; może użyć --wait lub --wait-once, ale używając tych poleceń, polecenie nigdy nie wróci.

Czy istnieje lepszy sposób, aby poczekać, aż usługa zewnętrzne IP (aka LoadBalancer Stopień IP) jest ustawiony lub nie udało się ustawić?

Odpowiedz

1

Nie ma tak naprawdę warunku "nie udało się ustawić", ponieważ będziemy go powtarzać na zawsze. Błąd mógł być przejściowym błędem w dostawcy usługi w chmurze lub problemem z limitem, który został rozwiązany w ciągu kilku godzin lub dni lub dowolnej liczby rzeczy. Jedyny błąd wynika z "jak długo chcesz czekać?" - które tylko ty możesz znać.

Nie mamy generalnego polecenia "czekać na wyrażenie", ponieważ jest ono arbitralnie złożone i lepiej jest kodować to w prawdziwym języku. Ergo pętla bash powyżej. Moglibyśmy lepiej radzić sobie z poleceniem "obserwuj", ale to wciąż koniec czasu.

+0

Czy możliwe jest odczekanie X sekund do czasu, aż będzie gotowe lub nie? – Wernight

+0

Co oznacza "błąd"? Że cały system przestanie próbować? Czemu? Czy powinien następnie oznaczyć usługę jako nieudaną? Nie jestem pewien, co próbujesz osiągnąć - czy nie wiesz, czy środowisko faktycznie obsługuje LB? A może spodziewasz się, że dostawca usług w chmurze zawodzi? Niezależnie - masz sposób to zrobić już, po prostu nie lubisz zapętlać :) –

+0

fail oznacza wyjście 1, jeśli w ciągu X sekund nie został przypisany zewnętrzny adres IP. Tak, nie lubię tworzyć skryptów do wdrożenia. Wdrożenie powinno być tak proste, jak to tylko możliwe, aby uniknąć błędów w moim skrypcie, które spowodowałyby poważne szkody, ponieważ jeden skrypt na projekt jest o wiele bardziej prawdopodobny, że zawiera błędy niż typowy skrypt/funkcja dla wszystkich projektów Kuberentes. – Wernight

Powiązane problemy