VK Cloud logo
Обновлена 15 апреля 2024 г. в 08:50

Использование балансировщиков нагрузки

Для всех сервисов Kubernetes типа «балансировщик нагрузки» (spec.type: LoadBalancer) платформа VK Cloud может автоматически создавать соответствующий TCP-балансировщик нагрузки с заданным поведением.

Балансировщик может:

  • Иметь публичный IP-адрес, который доступен из интернета, или иметь приватный IP-адрес, который недоступен из интернета. IP-адрес можно назначить балансировщику вручную или автоматически.

  • Использовать разные алгоритмы балансировки соединений между экземплярами приложения:

    • Случайный выбор реплики (по умолчанию).

      Балансировщик ведет себя так, потому что kube-proxy в кластерах Cloud Containers работает в режиме iptables. Подробнее в официальной документации Kubernetes.

    • Закрепление реплики за конкретным IP-адресом.

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

  • Разрешать доступ только с определенных IP-адресов.

Подготовительные шаги

  1. Создайте кластер Kubernetes самой актуальной версии.

    Параметры кластера выберите на свое усмотрение.

  2. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.

1. Создайте приложение

Запросы к этому приложению будут обслуживаться балансировщиком нагрузки. Чтобы продемонстрировать поведение балансировщика, приложение будет развернуто в виде StatefulSet из двух реплик. В этом случае все поды приложения будут пронумерованы, и можно будет легко определить, на какую реплику балансировщик направит запрос.

Чтобы создать такое приложение:

  1. Создайте файл манифеста:

  2. Создайте нужный ресурс Kubernetes на основе манифеста:

    kubectl apply -f coffee.yaml

2. Создайте балансировщики нагрузки

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

  1. Выберите публичный IP-адрес, который нужно назначить балансировщику или создайте новый. Это можно сделать в личном кабинете VK Cloud.

    К IP-адресу не должно быть привязано внутреннего IP-адреса.

  2. Создайте файл манифеста lb-static-public-ip.yaml.

    В параметре spec.loadBalancerIP укажите выбранный IP-адрес.

    apiVersion: v1kind: Servicemetadata:  name: coffee-svc-public-static-ipspec:  type: LoadBalancer  loadBalancerIP: <выбранный IP-адрес>  ports:  - port: 80    targetPort: 8080    protocol: TCP    name: http  selector:    app: coffee
  3. Создайте нужный ресурс Kubernetes на основе манифеста:

    kubectl apply -f lb-static-public-ip.yaml
  4. Периодически проверяйте статус сервиса командой:

    kubectl get svc coffee-svc-public-static-ip

    Дождитесь, когда сервису будет назначен статический публичный IP-адрес, заданный вручную: в столбце таблицы EXTERNAL-IP вместо <pending> появится IP-адрес.

Подробнее о сервисах и балансировщиках нагрузки в официальной документации Kubernetes.

3. Проверьте работу балансировщиков нагрузки

  1. Получите IP-адрес, назначенный балансировщику:

    kubectl get svc coffee-svc-public-static-ip

    Нужный адрес содержится в столбце таблицы EXTERNAL-IP.

  2. Выполните несколько раз запрос к приложению через балансировщик нагрузки:

    curl http://<IP-адрес балансировщика>

    Могут отвечать разные поды: и coffee-0, и coffee-1. Такое поведение означает, что балансировщик отправляет запросы на случайные реплики приложения.

Удалите неиспользуемые ресурсы

  1. Если созданные ресурсы Kubernetes вам больше не нужны, удалите их.

    kubectl delete svc coffee-svc-public-static-ipkubectl delete svc coffee-svc-session-affinitykubectl delete svc coffee-svc-restrict-access-by-ipkubectl delete svc coffee-svc-private-ipkubectl delete statefulset coffee
  2. Если статический публичный IP-адрес, который был назначен сервису coffee-svc-public-static-ip, вам больше не нужен, удалите его.

  3. Работающий кластер потребляет вычислительные ресурсы. Если он вам больше не нужен: