Создание 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) установлен или не установлен?
Может ли быть подождать X секунд до готовности или сбоя? – Wernight
Что означает «провал»? Что общая система перестанет пытаться? Зачем? Должен ли он затем пометить Сервис как не пройденный? Я не понимаю, что вы пытаетесь выполнить - разве вы не знаете, поддерживает ли среда LB? Или вы ожидаете, что провайдер облачных вычислений потерпит неудачу? Несмотря на это, у вас есть способ сделать это уже, вам просто не нравится цикл: –
fail означает выход 1, если внешний IP не был назначен в течение X секунд. Да, мне не нравится создавать сценарий для развертывания. Развертывание должно быть как можно более простым, чтобы избежать ошибок в моем сценарии, чтобы нанести серьезный ущерб, поскольку один скрипт для каждого проекта имеет гораздо более вероятные ошибки, чем обычный скрипт/функция для всех проектов Kuberentes. – Wernight