2016-02-03 1 views
5

Создание Kubernetes LoadBalancer немедленно возвращается (например: kubectl create -f ... или kubectl expose svc NAME --name=load-balancer --port=80 --type=LoadBalancer).Как подождать, пока Кубернетес назначит внешний IP-адрес службе LoadBalancer?

Я знаю, что ручной способ ждать в скорлупе:

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

Это, однако, не является идеальным:

  • Требуется по крайней мере 5 строк Bash сценариев.
  • Бесконечное ожидание даже в случае ошибки (иначе требуется тайм-аут, который увеличивает количество строк линии).
  • Возможно, неэффективно; может использовать --wait или --wait-once, но используя эту команду, команда никогда не возвращается.

Есть ли лучший способ, чтобы ждать, пока служба внешний IP (ака LoadBalancer Ingress IP) установлен или не установлен?

ответ

1

На самом деле не существует условия «не удалось установить», потому что мы будем повторять его навсегда. Сбой, возможно, был временной ошибкой в ​​поставщике облака или проблемой квоты, которая разрешается в течение часов или дней или любого количества вещей. Единственный провал - это «сколько времени вы готовы ждать?» - что только вы можете знать.

У нас нет общей команды «ждать выражения», потому что она оказывается произвольно сложной, и вам лучше всего просто кодировать ее на реальном языке. Ergo the bash выше. Мы могли бы сделать так, чтобы команда «смотреть», но в конце концов это еще один тайм-аут.

+0

Может ли быть подождать X секунд до готовности или сбоя? – Wernight

+0

Что означает «провал»? Что общая система перестанет пытаться? Зачем? Должен ли он затем пометить Сервис как не пройденный? Я не понимаю, что вы пытаетесь выполнить - разве вы не знаете, поддерживает ли среда LB? Или вы ожидаете, что провайдер облачных вычислений потерпит неудачу? Несмотря на это, у вас есть способ сделать это уже, вам просто не нравится цикл: –

+0

fail означает выход 1, если внешний IP не был назначен в течение X секунд. Да, мне не нравится создавать сценарий для развертывания. Развертывание должно быть как можно более простым, чтобы избежать ошибок в моем сценарии, чтобы нанести серьезный ущерб, поскольку один скрипт для каждого проекта имеет гораздо более вероятные ошибки, чем обычный скрипт/функция для всех проектов Kuberentes. – Wernight

Смежные вопросы