2016-02-03 20 views
5

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?

Trả lời

1

Không thực sự là điều kiện "không được đặt" vì chúng tôi sẽ thử lại vĩnh viễn. Lỗi có thể là lỗi tạm thời trong nhà cung cấp dịch vụ đám mây hoặc vấn đề hạn ngạch được giải quyết trong khoảng thời gian hoặc ngày hoặc bất kỳ số thứ nào. Thất bại duy nhất xuất phát từ "bạn sẵn sàng chờ bao lâu?" - mà chỉ có bạn mới biết được.

Chúng tôi không có lệnh "chờ biểu thức" chung vì lệnh này kết thúc tùy ý phức tạp và bạn nên tắt mã hóa bằng ngôn ngữ thực. Ergo vòng bash ở trên. Chúng tôi có thể làm tốt hơn về việc có một lệnh 'xem', nhưng nó vẫn là một thời gian chờ cuối cùng.

+0

Có thể chờ đợi giây lát X cho đến khi sẵn sàng hay không? – Wernight

+0

"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 :) –

+0

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

Các vấn đề liên quan