Почему поражаются разные модули, если в Kubernetes нет встроенного балансировщика нагрузки?

#kubernetes #kind

Вопрос:

Я узнал, что Kubernetes, работающий через мини-куб или вид (это то, что я использую), не имеет балансировщика нагрузки. Эта функциональность исходит от облачных поставщиков. Тем не менее, когда я создал простое развертывание с 3 репликами и службой:

 kubectl create deployment kiada --image=luksa/kiada:0.1
kubectl scale deployment kiada --replicas=3
kubectl expose deployment kiada --type=LoadBalancer --port 8080
 

Я могу связаться с различными стручками по телефону :8080.

Мой локальный кластер имеет 2 рабочих узла. Когда я нажимаю :8080, я иногда получаю ответ от модуля, работающего на worker-1, а иногда я получаю ответ от другого модуля, работающего на узле worker-2. Разве это не балансировка нагрузки?

При этом я не понимаю, почему говорится, что Kubernetes не обеспечивает балансировку нагрузки сам по себе, поскольку я вижу, что это явно так.

Ответ №1:

Служба Kubernetes будет загружать запросы на балансировку в любой из модулей, соответствующих меткам, указанным в Службе.

Не смешивайте это с type: LoadBalancer тем, что является способом предоставления доступа к вашей службе с помощью облачного балансировщика нагрузки, обычно с внешним IP-адресом.

Комментарии:

1. Я продолжил чтение («Кубернетес в действии») и узнал, что на самом деле существует два балансировщика нагрузки. Один из них предоставляется облачным провайдером (если данный K8s работает в облаке и управляется) — он балансирует нагрузку на трафик между рабочими узлами. Другой балансировщик нагрузки встроен в K8s, и он балансирует нагрузку между блоками.