Назад | Перейти на главную страницу

Добавить LoadBalancer в существующий сервис

Следуя этому руководству по гостевой книге.

Ближе к концу они как бы замалчивают, как создать LoadBalancer или назначить NodePorts к сервису. Они ссылаются этот документ это описывает различные типы и то, что они делают, но на самом деле не вдавается в подробности о том, как их применить к службе. Есть ли способ обновить работающую службу, создав и подключив балансировщик нагрузки к указанным портам?

Используя Amazon Web Services для размещения нашего кластера, он отлично поддерживает балансировщик нагрузки при создании службы, но я не уверен, как изменить эту службу.

РЕДАКТИРОВАТЬ:

Это привело к ошибке:

$ kubectl предоставляет интерфейс сервиса --port = 80 --type = LoadBalancer
Ошибка сервера: служба "интерфейс" уже существует

Это довольно запутанно, но очевидно kubectl expose может только создать новую услугу, но не обновить существующую. В нем говорится, что при запуске существующей службы вы должны передать --name флаг, чтобы указать желаемое имя новой службы, чтобы избежать конфликта, который вы наблюдали.

Чтобы обновить службу на месте, вы должны иметь возможность использовать либо kubectl patch или kubectl update. Вероятно, это не оптимальный подход, но я лично склонен делать такие вещи, выполняя kubectl get svc svc-name -o yaml > svc.yaml, обновляя svc.yaml по желанию (чтобы type: LoadBalancer в данном случае), то kubectl update -f svc.yaml.

Я не уверен, подходит ли это для вашего случая, но более радикальным и простым подходом было бы удаление службы (но не развертывания):

kubectl delete service 'service-name'

и повторно выставляем развертывание как LoadBalancer:

kubectl expose deployment/'deployment-name' --type="LoadBalancer"

Вы можете сделать это либо:

  • в интерактивном режиме kubectl edit <SERVICE_NAME> и измените тип на "LoadBalancer" в редакторе
  • в одной команде kubectl patch <SERVICE_NAME> -p '{"spec":{"type":"LoadBalancer"}}'