Следуя этому руководству по гостевой книге.
Ближе к концу они как бы умалчивают о том, как создать LoadBalancer
или назначить NodePorts
на службу. Они ссылаютсяэтот документкоторый описывает различные типы и что они делают, но не вдается в подробности того, как их применять к службе. Есть ли способ обновить запущенную службу, создав и прикрепив балансировщик нагрузки к указанным портам?
Для размещения нашего кластера мы используем Amazon Web Services. Он отлично поддерживает балансировку нагрузки при создании сервиса, но я не уверен, как его изменить.
РЕДАКТИРОВАТЬ:
Попытка этого привела к ошибке:
$ kubectl expose service frontend --port=80 --type=LoadBalancer
Ошибка сервера: служба "frontend" уже существует
решение1
Это довольно запутанно, но, по-видимому, 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
.
решение2
Я не уверен, подходит ли это в вашем случае, но более радикальным и простым подходом было бы удалить службу (но не развертывание):
kubectl delete service 'service-name'
и повторно выставьте развертывание как LoadBalancer:
kubectl expose deployment/'deployment-name' --type="LoadBalancer"
решение3
Вы можете сделать это либо:
- интерактивно
kubectl edit <SERVICE_NAME>
и измените тип на «LoadBalancer» в редакторе - в одной команде
kubectl patch <SERVICE_NAME> -p '{"spec":{"type":"LoadBalancer"}}'