Tạo một số Kubernetes LoadBalancer trả về ngay lập tức (ví dụ: kubectl create -f ...
hoặc kubectl expose svc NAME --name=load-balancer --port=80 --type=LoadBalancer
).Làm thế nào để đợi cho đến khi Kubernetes gán một IP bên ngoài cho một dịch vụ LoadBalancer?
Tôi biết một cách thủ công để chờ đợi trong vỏ:
external_ip=""
while [ -z $external_ip ]; do
sleep 10
external_ip=$(kubectl get svc load-balancer --template="{{range .status.loadBalancer.ingress}}{{.ip}}{{end}}")
done
Tuy nhiên điều này không phải là lý tưởng:
- Yêu cầu ít nhất 5 dòng kịch bản Bash.
- Chờ vô hạn ngay cả trong trường hợp xảy ra lỗi (do đó yêu cầu hết thời gian chờ làm tăng số lượng dòng).
- Có lẽ không hiệu quả; có thể sử dụng
--wait
hoặc--wait-once
nhưng sử dụng những lệnh đó không bao giờ trả lại.
Có cách nào tốt hơn để chờ đợi cho đến khi một dịch vụ IP bên ngoài (aka loadbalancer Ingress IP) được thiết lập hoặc thất bại trong việc thiết lập?
Có thể chờ đợi giây lát X cho đến khi sẵn sàng hay không? – Wernight
"Thất bại" nghĩa là gì? Rằng hệ thống tổng thể sẽ ngừng cố gắng? Tại sao? Sau đó có nên đánh dấu Dịch vụ là không thành công không? Tôi không rõ bạn đang cố gắng làm gì - có phải bạn không biết liệu môi trường có thực sự hỗ trợ LB không? Hoặc bạn mong đợi một nhà cung cấp đám mây thất bại? Bất kể - bạn có một cách để làm điều đó, bạn chỉ không thích looping :) –
thất bại có nghĩa là thoát 1 nếu không có IP bên ngoài đã được chỉ định trong vòng X giây. Có, tôi không thích tạo kịch bản để triển khai. Triển khai nên càng đơn giản càng tốt để tránh lỗi trong kịch bản của tôi gây ra thiệt hại nghiêm trọng vì một tập lệnh cho mỗi dự án có nhiều khả năng có lỗi hơn so với tập lệnh/tính năng phổ biến cho tất cả các dự án Kuberentes. – Wernight